Bien que Java se soit développé sur la base de C ++, il a amélioré bon nombre des lacunes de C ++. L'une des choses qui doivent être mentionnées est les chaînes. Nous savons qu'avec l'approvisionnement de l'apprentissage, lors de la saisie du MFC, lors du traitement des chaînes ou des caractères, vous devez souvent utiliser la macro _t () pour transformer les caractères ou les chaînes en type Unicode. Sinon, un bogue se produira pendant le traitement. En Java, le personnage ou les personnages stockés dans la classe de personnages n'est pas un octet, mais 2 octets. Unicode est utilisé, qui est pour soutenir tous les personnages du monde.
La séquence de caractères forme une chaîne, et il existe deux types de chaînes: l'une est une constante de chaîne qui n'a pas besoin d'être modifiée après la création, qui est appelée constante de chaîne. Dans Java, il est stocké en utilisant la classe String;
L'une est une variable de chaîne qui doit être modifiée après la création, appelée variable de chaîne. En Java, il est opéré et géré en utilisant la classe StringBuffer.
Classe StringBuffer
1. Créez un objet de classe StringBuffer
L'objet StringBuffer Class représente une variable de chaîne (notez qu'il s'agit d'une "variable"). Chaque objet de classe StringBuffer est une variable de chaîne qui peut être élargie et modifiée. Voici les constructeurs de classe StringBuffer couramment utilisés:
(1) public StringBuffer ()
Créez un nouvel objet vide de la classe StringBuffer, avec la valeur initiale de sa capacité définie à 16 caractères (notez qu'il est de 16 caractères)
(2) public StringBuffer (int le long)
Créer un nouvel objet StringBuffer vide, dont la valeur initiale de capacité est définie sur des caractères de longueur
(3) public StringBuffer (String Str)
Créez un nouvel objet StringBuffer, dont le contenu est le contenu de STR, et la capacité est définie sur la longueur de STR et ajouter 16 caractères (Remarque: Ajouter 16 caractères)
2. Méthodes courantes de l'objet de classe StringBuffer
(1) Extension de l'objet de classe StringBuffer
La classe StringBuffer fournit deux ensembles de méthodes pour étendre les caractères contenus dans l'objet StringBuffer, à savoir:
1) Public StringBuffer Ajout
(Objet obj)
La méthode d'ajout est utilisée pour étendre les caractères contenus dans l'objet StringBuffer. Après avoir converti l'objet de paramètre spécifié en une chaîne, l'ajoute après l'objet StringBuffer original et renvoie le nouvel objet StringBuffer. Les objets de paramètre supplémentaires peuvent être de différents types de données, tels que int, char, string, double, etc.
2) Insert public StringBuffer (
INT INSERT POSITION OFFSET, Type d'objet de paramètre, Nom de l'objet paramètre)
Cette méthode convertit l'objet de paramètre spécifié en une chaîne, l'inserte à la position spécifiée dans l'objet StringBuffer d'origine et renvoie le nouvel objet StringBuffer.
(2) la longueur et la capacité de l'objet de classe StringBuffer
La longueur d'un objet de classe StringBuffer fait référence au nombre de caractères qu'il contient; La capacité se réfère au nombre d'espace de caractère alloué.
1) public int longueur ()
Cette méthode renvoie le nombre de caractères contenus dans l'objet de classe StringBuffer actuel.
2) Public int Capacity ()
Cette méthode renvoie le nombre d'espace de caractère alloué par l'objet de classe StringBuffer actuel.
(3) Modification de l'objet de classe StringBuffer
public void setCharat (inindex, Chearch)
Cette méthode remplace le caractère en position d'index dans l'objet StringBuffer actuel par le caractère spécifié Ch.
(4) affectation et ajout de chaînes
Les chaînes sont des types de données qui sont souvent utilisés dans les programmes. L'attribution et l'ajout de chaînes sont introduits dans le système de compilation Java.
(5) D'autres méthodes sont similaires à celles de la classe String
3. Utilisez la classe StringTokenizer pour décomposer les chaînes
La classe StringTokenizer est située dans le package Java.util, et lors de l'utilisation de cette classe, elle est ajoutée au début du programme.
importjava.util.stringtokenizer ou
importjava.util. *
Classe StringTokenizer
Pour la classe StringTokenizer, sa fonction principale est de diviser la chaîne en fonction du caractère divisé donné, et sa fonction est similaire à la méthode divisée de la classe de chaîne
1. Le constructeur de la classe StringTokenizer
(1) StringTokenizer (Stringstr)
Créez un objet StringTokenizer pour la chaîne STR donnée, dont le délimiteur est défini sur "/ t / n / r / f", c'est-à-dire: espace, onglet horizontal, pause de ligne, retour de chariot, caractère de table
(2) StringTokenizer (String Str, String Delim)
Créez un objet StringTokenizer pour la chaîne STR donnée, dont le délimiteur est le délire de chaîne spécifié, et ne contient pas de délimiteur par défaut.
3) StringTokenizer (String Str, String Delim, boolean returndelims)
Créez un objet StringTokenzer pour la chaîne donnée STR donnée dont le délimiteur est le délire de chaîne spécifié. Si returndelims est vrai, chaque chaîne de l'objet StringTokenizer créé contient un délimiteur, sinon il ne contient pas de délimiteur.
2. Méthodes courantes de la classe StringTokenizer
nintCountTokens ()
Renvoie le nombre de sous-chaînes dans l'objet StringTokenizer après avoir été divisé
nbooleanhasmoreElements ()
La fonction de cette méthode est la même que celle de la méthode Hasmoretokens ()
nbooleanhasmoretokens ()
Détectez si l'objet StringTokenizer contient une sous-chaîne divisée. Si c'est le cas, il reviendra vrai, sinon il reviendra faux.
ObjectNextElement ()
Cette méthode a la même fonction que NextToken (). La principale différence est qu'il ne renvoie pas un objet String, mais un objet d'objet
StringNExtToken ()
Renvoie la prochaine sous-chaîne divisée dans l'objet StringTokenizer
StringNExtToken (String Delim)
Renvoie la prochaine sous-chaîne divisée dans l'objet StringTokenizer, mais le délimiteur est réinitialisé à Delim
Nin fait, dans certains langages de programmation, tels que C, la chaîne est composée de tableaux de caractères, et la fin de chaque chaîne est marquée "/ 0", mais ce n'est pas le cas en Java.
nin java, les cordes existent généralement comme des objets de la classe de chaîne, tels que: Strings = "J'aime Java!", Où "j'aime Java!" est un objet.
Par conséquent, les chaînes et les tableaux de personnages en Java sont complètement différents, et ils sont également différents des chaînes en C!
Nin afin de faciliter la conversion des tableaux de chaîne et de caractères, de nombreux constructeurs et méthodes sont fournis dans la classe de chaîne
n, comme la chaîne de constructeur (valeur char [])
n Méthode ToCharArray ()
Valeur de la méthode (données char [])
Piscine constante
Pour les constantes de chaîne qui apparaissent dans le programme source, lorsque le programme s'exécutera, ils seront enregistrés dans un pool constant pour le cache.
La comparaison des variables qui font référence à ces chaînes mises en cache dans des pools constants obtiendront également le résultat correct avec ==.
Cependant, au moment de l'exécution, diverses opérations sur des chaînes telles que +, la sous-chaîne, etc. produiront de nouveaux objets de chaîne.
Mais de puissants compilateurs optimiseront la couture des constantes de chaîne, comme lorsque S3 = "Hell" + "O", S3 pointera toujours vers la chaîne dans le pool constant. Cependant, pour les opérations variables, il est impossible d'exiger que la machine virtuelle fonctionne telle que S1 + S2 et de déterminer si le résultat est déjà dans le pool constant. Par conséquent, l'utilisation est égale au lieu de == pour déterminer si deux chaînes sont égales.
public static void main (String [] args) {// Les constantes de chaîne sont placées dans un pool constant. String S1 = "Hello"; String s2 = "Hello"; String S3 = "Hell" + "O"; System.out.println (S1 == S2); System.out.println (S1 == S3); // Opération comme +, la sous-chaîne sur chaîne en créent une nouvelle. String S4 = "Hell"; String S5 = S4 + "O"; System.out.println (S1 == S5); System.out.println (S1.Equals (S5)); // La sous-chaîne a une poignée spéciale sur la sous-chaîne (0) String S6 = S1.SubString (0); System.out.println (S1 == S6); }Testez les codes deytecodes de S1, S2, S3:
0: LDC # 16; // chaîne bonjour
2: Store_1
3: LDC # 16; // chaîne bonjour
5: Store_2
6: LDC # 16; // chaîne bonjour
8: Store_3
Testez les codes deytecodes de S4 et S5:
41: LDC # 30; // String Hell
43: Store 4
45: Nouveau # 32; // Classe Java / Lang / StringBuilder
48: dup
49: Aload 4
51: invokestatique # 34; // Méthode java / lang / string.valueof: (ljava / lang / objet;) ljava / lang / string;
54: InvokeSpecial # 40; // Méthode java / lang / stringBuilder. "<Init>" :( ljava / lang / string;) v
57: LDC # 43; // String o
59: Invokevirtual # 45; // Méthode java / lang / stringBuilder.append: (ljava / lang / string;) ljava / lang / stringBuilder;
62: Invokevirtual # 49; // Méthode java / lang / stringbuilder.tostring :() ljava / lang / string;
Notez que la méthode de la sous-chaîne, la sous-chaîne (0,3) est une chaîne qui passe des caractères 0 à 2. La raison de cette conception peut être qu'il est facile de calculer la longueur de la sous-chaîne, 3-0 = 3. Dans le même temps, la sous-chaîne a un traitement d'optimisation spécial pour les paramètres spéciaux:
public String substring (int BeginIndex, int endIndex) {if (beginIndex <0) {throw new StringIndexoutofBoundSexception (beginIndex); } if (endIndex> count) {throw new StringIndexoutofBoundSexception (endIndex); } if (beginIndex> endIndex) {throw new StringIndexoutofBoundSexception (endIndex - BeginIndex); } return ((beginIndex == 0) && (endIndex == count))? Ceci: new String (Offset + BeginIndex, endIndex - BeginIndex, valeur); } De cela, nous pouvons voir qu'il n'y a rien de magique derrière l'objet String, et avoir une certaine compréhension du bytecode peut mieux le comprendre.
En fait, de nombreuses informations sur les classes et les méthodes sont stockées dans le pool constant, telles que les noms de packages, les noms de classe, les signatures de méthode, etc. Si vous êtes intéressé, vous pouvez effectuer des recherches approfondies.