JavaRush /Blog Java /Random-FR /Classe de chaîne
articles
Niveau 15

Classe de chaîne

Publié dans le groupe Random-FR
  • Méthodes
  • Générer une chaîne aléatoire
  • Comparaison de chaînes : equals()ou== ?
La classe est Stringtrès souvent utilisée par les programmeurs, elle doit donc être très bien apprise. Chaîne de classe - 1N'oubliez pas que les objets de classe Stringsont immuables. Ainsi, lorsque vous pensez modifier une chaîne, vous créez en réalité une nouvelle chaîne. Java a des classes spéciales StringBufferqui StringBuilderpermettent de modifier une chaîne. Les classes String, StringBuffer, StringBuildersont définies dans le package java.lang et sont disponibles automatiquement sans déclaration d'importation. Les trois classes implémentent l'interface CharSequence. Créer une chaîne est très simple. Par exemple, vous pouvez faire ceci :
String aboutCat = "Кот - это звучит гордо, а если наступить на хвост, то громко";
Vous pouvez créer un tableau de chaînes :
String[] cats = {"Васька", "Barsik", "Murzik"};
Vous pouvez créer un objet classe videString :
String str = new String();
Vous pouvez créer une chaîne via un tableau de caractères :
char[] chars = { 'c', 'a', 't' };
String str = new String(chars);
Il existe également un constructeur qui vous permet de définir la plage d'un tableau de caractères. Vous devez préciser le début de la plage et le nombre de caractères à utiliser :
char[] chars = {'c', 'a', 't', 'a', 'm', 'a', 'r', 'a', 'n' };
String str = new String(chars, 0, 3);
Vous pouvez créer un objet classe Stringà partir d'un objet classes StringBufferà l'aide StringBuilderdes constructeurs suivants :
String(StringBuffer an object_StrBuf)
String(StringBuilder an object_StrBuild)

Opérateurs +et += pourString

En Java, le signe plus ( +) signifie concaténation de chaînes, c'est-à-dire combinaison de chaînes.
String cat = "Кот";
String name = "Васька";
//складываем две строки и пробел между ними, чтобы слова не слиплись
String fullname = cat + " " + name; // получится Кот Васька
Si l'un des opérandes d'une expression contient une chaîne, alors les autres opérandes doivent également être des chaînes. Par conséquent, Java lui-même peut convertir des variables en une représentation sous forme de chaîne, même si ce ne sont pas des chaînes.
int digit = 4;
String paws = " лапы";
String aboutcat = digit + paws; // хотя мы складываем число и строку, но все равно получим строку
За кулисами Java за нас преобразовало число 4 в строку "4"

Formatage des chaînes

Supposons que nous ayons une ressource chaîne :
<string name="aboutcat">У кота по имени Барсик четыре лапы, один хвост. Ему 5 лет</string>
Pour afficher cette chaîne par programme dans l'élément TextView, vous pouvez utiliser le code :
TextView tvCatsInfo = (TextView)findViewById(R.id.textView1);
tvCatsInfo.setText(R.string.aboutcat);
Imaginez que vous ayez plusieurs chats. Vous pouvez bien entendu avoir votre propre lignée pour chaque chat. Mais les lignes sont très similaires, seuls les noms et les âges changent. Vous pouvez également modifier le nombre de pattes et de queues (qu'est-ce que vous fumez ?). Dans de tels cas, vous pouvez appliquer un formatage de chaîne. Nous devons déterminer les mots que nous allons modifier et les remplacer par un ensemble spécial de caractères commençant par un symbole de pourcentage, puis un nombre incrémenté de un, puis $spar des chaînes ou $dpar des nombres. Modifions donc notre ressource chaîne comme ceci :
<string name="aboutcat">У кота по имени %1$s %2$s лапы, %3$s хвост. Ему %4$d лет</string>
Modifions le code :
String strBarsik = "Barsik";
String strPaws = "четыре";
String strTail = "one";
int year = 5;
String strCats = getResources().getString(R.string.aboutcat);
String strFinal = String.format(strCats, strBarsik, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
Si vous avez un chat Vaska et qu'il a six ans, ajoutez deux variables et formatez la ligne
String strVaska = "Васька";
year = 6;
String strFinal = String.format(strCats, strVaska, strPaws, strTail, year);
tvCatsInfo.setText(strFinal);
Voici un exemple de formatage simple. Souvenez-vous-en et utilisez-le aux bons endroits.

Ressource de chaîne

Il est conseillé de stocker les chaînes dans les ressources. L'accès par programme à une ressource de chaîne se fait comme ceci :
String catName = getResources().getString(R.string.barsik);

Extraire des chaînes de tableaux de chaînes dans les ressources

Supposons que vous ayez un tableau de chaînes défini dans un fichier strings.xml appelé cats_array. Ensuite, vous pouvez accéder aux lignes de ressources comme celle-ci :
Resources res = getResources();
String[] cats = res.getStringArray(R.array.cats_array);

Méthodes

public char charAt (int index) Renvoie le caractère au décalage spécifié dans cette chaîne. Le compte à rebours démarre à 0. Inutile d’utiliser des valeurs négatives et inexistantes, soyez plus sérieux. Pour extraire plusieurs caractères, utilisez getChars().
String testString = "Котёнок";
char myChar = testString.charAt(2);
tv.setText(Character.toString(myChar)); // выводит третий символ - т
public int codePointAt(int index) Renvoie le caractère Unicode à l'index donné
String testString = "Котёнок";
int myChar = testString.codePointAt(3);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointBefore(int index) Renvoie le caractère Unicode qui précède l'index donné
String testString = "Котёнок";
int myChar = testString.codePointBefore(4);
tv.setText(String.valueOf(myChar)); // возвращает 1105
public int codePointCount(int start, int end) Calcule le nombre de caractères Unicode entre les positions startetend
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar)); // возвращает 3
public int compareTo(String string) Compare la chaîne spécifiée à l'aide des valeurs de caractères Unicode et calcule quelle chaîne est inférieure, égale ou supérieure à la suivante. Peut être utilisé pour le tri. Le cas est pris en compte. Si les chaînes correspondent, alors 0 est renvoyé, si inférieur à zéro, alors la chaîne appelante est inférieure à string string, si supérieure à zéro, alors la chaîne appelante est supérieure à string string. Les mots en majuscules sont placés au-dessus des mots en minuscules.
String testString = "Котёнок";

if (testString.compareTo("котёнок") == 0) {
    tvInfo.setText("Строки равны");
} else {
    tvInfo.setText("Строки не равны. Возвращено"
            + testString.compareTo("котёнок")); // возвращает -32
}
Trions le tableau de chaînes à l'aide du tri à bulles.
String[] poem = { "Мы", "везём", "с", "собой", "кота" };

for (int j = 0; j < poem.length; j++) {
	for (int i = j + 1; i < poem.length; i++) {
		if (poem[i].compareTo(poem[j]) < 0) {
			String temp = poem[j];
			poem[j] = poem[i];
			poem[i] = temp;
		}
	}
	System.out.println(poem[j]);
}
En conséquence nous obtenons :
Мы
везём
кота
с
собой
Comme vous pouvez le constater, changer la place des termes ne change pas la somme de tri des chats. public int compareToIgnoreCase (String string) Compare la chaîne spécifiée à l'aide de valeurs de caractères Unicode, insensibles à la casse.
String testString = "Котёнок";

if (testString.compareToIgnoreCase("котёнок") == 0) {
    tv.setText("Строки равны"); // слова одинаковы, если не учитывать регистр
} else {
    tv.setText("Строки не равны. Возвращено"
            + testString.compareTo("котёнок"));
}
public String concat (String string) Concatène une chaîne avec la chaîne spécifiée. Une nouvelle chaîne est renvoyée contenant la concaténation des deux chaînes. Notez que le nom de la méthode lui-même contient un chat !
String testString = "Сук";
String newString = testString.concat("кот");
tv.setText(newString);
La méthode remplit la même fonction que l'opérateur +et pourrait s'écrire Сук + кот. Mais un vrai amateur de chats utilisera la méthode du « chat ». public boolean contains (CharSequence cs) Détermine si une chaîne contient une séquence de caractères dansCharSequence
String testString = "котёнок";

if(testString.contains("кот")){
    infoTextView.setText("В слове котёнок содержится слово кот!");
}
public static String copyValueOf (char[] data, int start, int length) Crée une nouvelle chaîne contenant les caractères spécifiés à partir du tableau Dataen commençant à la position start(numérotation basée sur zéro) de length length . public static String copyValueOf(char[] data) Crée une nouvelle chaîne contenant les caractères du tableau spécifié. Changer le tableau après la création de la ligne ne modifie pas la ligne créée. public boolean endsWith(String suffix) Vérifie si une chaîne se termine par suffix.
String str1 = "Суккот";

if(str1.endsWith("кот"))
    infoTextView.setText("Слово заканчивается на котике");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean equals (Object string) Compare l'objet spécifié et une chaîne et renvoie vrai si les chaînes comparées sont égales, c'est-à-dire contient les mêmes caractères et dans le même ordre sensible à la casse.
String str1 = "Кот";
String str2 = "Кошка";

if(str1.equals(str2))
    infoTextView.setText("Строки совпадают");
else
    infoTextView.setText("Строки не совпадают");
La méthode ne doit pas être confondue avec l'opérateur ==, qui compare deux références d'objet et détermine si elles font référence à la même instance. Voir Comparaison de chaînes : equals()ou ==? public boolean equalsIgnoreCase(String string) Compare la chaîne spécifiée avec la chaîne source sans tenir compte de la casse et renvoie vrai si elles sont égales. La plage AZ est considérée comme égale à la plage az.
String str1 = "Кот";
String str2 = "кот";

if(str1.equalsIgnoreCase(str2))
    infoTextView.setText("Строки совпадают");
else
    infoTextView.setText("Строки не совпадают");
public static String format(Locale locale, String format, Object... args)
Renvoie une chaîne formatée en utilisant le format fourni et les arguments localisés dans la portée donnée. Par exemple la date ou l'heure
// выводим число типа float с двумя знаками после запятой
String.format("%.2f", floatValue);
Nous collons deux mots qui apparaissent sur une nouvelle ligne. Dans ce cas, le deuxième mot est affiché en majuscule.
String str1 = "Кот";
String str2 = "васька";
String strResult = String.format("%s\n%S", str1, str2);
// выводим результат в TextView
infoTextView.setText(strResult);
Convertissez le nombre en système octal.
String str1 = "8";
int inInt = Integer.parseInt(str1); // конвертируем строку в число
String strResult = String.format("(Восьмеричное meaning): %o\n", inInt);

infoTextView.setText(strResult);
Par analogie, nous affichons en système hexadécimal
String str1 = "255";
int inInt = Integer.parseInt(str1);
String strResult = String.format("(Шестнадцатеричное meaning): %x\n", inInt);
// число 255 будет выведено How ff
infoTextView.setText(strResult);
Pour une utilisation en majuscules , ce sera %Xalors . Pour une utilisation en système décimal . La date peut également être affichée de différentes manières. ffFF%d
Date now = new Date();
Locale locale = Locale.getDefault();
infoTextView.setText(
		String.format(locale, "%tD\n", now) + // (MM/DD/YY)
		String.format(locale, "%tF\n", now) + // (YYYY-MM-DD)
		String.format(locale, "%tr\n", now) + // Full 12-hour time
		String.format(locale, "%tz\n", now) + // Time zone GMT offset
		String.format(locale, "%tZ\n", now)); // Localized time zone bbreviation
public byte[] getBytes(String charsetName) Renvoie une chaîne formatée en utilisant le format fourni. public void getBytes(int start, int end, byte[] data, int index)et autres surcharges La méthode stocke les caractères dans un tableau d'octets, une alternative au getChars(). Souvent utilisé lors de l'exportation de chaînes à partir de diverses sources utilisant d'autres caractères Unicode. Par exemple, Java fonctionne par défaut avec des caractères Unicode 16 bits, et sur Internet, les chaînes utilisent souvent Unicode 8 bits, ASCII, etc. public void getChars(int start, int end, char[] buffer, int index) Méthode d'extraction de plusieurs caractères d'une chaîne. Vous devez préciser l'index du début de la sous-chaîne ( start), l'index du caractère suivant la fin de la sous-chaîne à extraire ( end ). Le tableau qui reçoit les caractères sélectionnés se trouve dans le paramètre buffer . L'index du tableau, à partir duquel la sous-chaîne sera écrite, est passé dans le paramètre index . Assurez-vous que le tableau est suffisamment grand pour contenir tous les caractères de la sous-chaîne spécifiée.
String unusualCat = "Котёнок по имени Гав";
int start = 5;
int end = 12;
char[] buf = new char[end - start];
unusualCat.getChars(start, end, buf, 0);
infoTextView.setText(new String(buf));
public int hashCode() Renvoie un entier qui est le code de hachage de cet objet. public int indexOf(int c) Renvoie le numéro de la première position rencontrée avec l'index c spécifié.
String testString = "котёнок";
// символ ё встречается в четвёртой позиции (index = 3)
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start) Recherche l'index à partir de la positionstart
String testString = "котёнок";
// вернёт -1, так How после 5 символа буквы ё нет
infoTextView.setText(String.valueOf(testString.indexOf("ё", 4)));
public int indexOf (String string) Recherche une chaîne de caractèressubString
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка")));
public int indexOf (String subString, int start) Recherche une chaîne de caractères subStringcommençant à la positionstart
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка", 2)));
public String intern () "Hache" une chaîne public boolean isEmpty () Vérifie si la chaîne est vide
if(catname.isEmpty()) {
    // здесь ваш code
}
Cette méthode est apparue dans l'API 9 (Android 2.1). Pour les appareils plus anciens, utilisez String.length() == 0 public int lastIndexOf (String string) и другие перегруженные версии Renvoie le numéro de la dernière position rencontrée à l'index spécifié. Par exemple, vous pouvez obtenir le nom du fichier sans extension comme ceci :
filename.toString().substring(0, filename.getString().lastIndexOf("."));
Dans cet exemple, nous obtenons la position du dernier point et obtenons la sous-chaîne qui le précède. public int length() Renvoie la longueur d'une chaîne
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.length())); // возвращает 7 (семь символов)
public boolean matches(String regularExpression) Vérifie si une chaîne correspond aux expressions régulières.
public int offsetByCodePoints (int index, int codePointOffset)
Renvoie une position située à une distance codePointOffsetaprès la position de départ spécifiée par le paramètre. index public boolean regionMatches (int thisStart, String string, int start, int length) La méthode compare la partie spécifiée de la chaîne avec une autre partie de la chaîne. Vous devez spécifier l'index du début de la plage de lignes de l'objet appelant de la classe String. La chaîne à comparer est passée en paramètre string. L'index du caractère à partir duquel la comparaison doit être effectuée est passé en paramètre start, et la longueur de la sous-chaîne à comparer est passée en paramètre length. public boolean regionMatches (boolean ignoreCase, int thisStart, String string, int start, int length) Version surchargée. La méthode compare la partie spécifiée d'une chaîne avec une autre partie de la chaîne, en ignorant la casse. public String replace(CharSequence target, CharSequence replacement) и другие перегруженные версии Change un caractère ou une séquence de caractères targetenreplacement
String testString = "whale";
// меняем и на о
infoTextView.setText(testString.replace("And", "о")); // возвращается кот
public String replaceAll (String regularExpression, String replacement) public String replaceFirst (String regularExpression, String replacement) Supprime les premiers caractères à l'aide d'une expression régulière. Par exemple, si vous devez supprimer les zéros au début des nombres 001, 007, 000024, vous pouvez utiliser cet appel.
String s = "001234-cat";
String s = s.replaceFirst ("^0*", ""); // останется 1234-cat
public String[] split (String regularExpression) и другие перегруженные версии Divise une chaîne en un tableau de mots. Par exemple, il existe une chaîne Vaska Ryzhik Murzik Barsik et nous voulons obtenir un tableau de noms de chats :
String catnames = "Васька Рыжик Мурзик Барсик";
String aCats[] = catnames.split(" ");  // по пробелу
On a:
aCats[0] = Васька
aCats[1] = Рыжик
aCats[2] = Мурзик
aCats[3] = Барсик
public boolean startsWith(String prefix) Vérifie si une chaîne commence par les caractères prefixdu début de la chaîne
String str1 = "котлета";

if(str1.startsWith("кот"))
    infoTextView.setText("Слово содержит кота");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public boolean startsWith(String prefix, int start) Vérifie si la chaîne donnée commence par des caractères prefixà la position spécifiée.
String str1 = "Суккот";

if(str1.startsWith("кот", 3))
    infoTextView.setText("Слово содержит кота");
else
    infoTextView.setText("Плохое слово. Нет смысла его использовать");
public CharSequence subSequence (int start, int end) Similaire à la méthode substring(), mais peut être utilisée pour CharSequence. public String substring(int start)et autres surcharges Crée une nouvelle séquence/chaîne avec des caractères de la chaîne donnée commençant à position startjusqu'à la fin de la ligne/se terminant par le caractère à position end. La nouvelle ligne contient des caractères de startla fin à - 1, nous prenons donc un caractère supplémentaire.
String testString = "скотина";

infoTextView.setText(testString.substring(1, 4)); // возвращается кот
public char[] toCharArray() Copie les caractères de cette chaîne dans un tableau de caractères. Le même résultat peut être obtenu grâce au getChars(). La documentation ne recommande pas d'utiliser cette méthode, suggérant le charAt().
String unusualCat = "Котёнок по имени Гав";

char[] yomoe = unusualCat.toCharArray();
infoTextView.setText(String.valueOf(yomoe[3]));
public String toLowerCase() и другие перегруженные версии Convertit une chaîne en minuscules. Les paramètres régionaux par défaut contrôlent la conversion. Chaîne chat = "Chat" ; Chaîne inférieure = cat.toLowerCase(); infoTextView.setText (inférieur); public String toString () Renvoie une chaîne. Pour la chaîne elle-même, qui elle-même est déjà une chaîne, renvoyer la chaîne est inutile (oh, comme je l'ai pliée). Mais cette méthode est en réalité très utile pour d’autres classes. public String toUpperCase() Convertit une chaîne en majuscules. Les paramètres régionaux par défaut contrôlent la conversion.
String cat = "Кот";
String upper = cat.toUpperCase();
infoTextView.setText(upper);
public String trim() Supprime les espaces au début et à la fin d'une chaîne.
String str = "   Hello Kitty  ".trim();
infoTextView.setText(str);
public static String valueOf(long value)et autres surcharges Convertit le contenu (nombres, objets, caractères, tableaux de caractères) en chaîne.
int catAge = 7; // это число

infoTextView.setText(String.valueOf(catAge)); // преобразовано в строку

Générer une chaîne aléatoire

Disons que nous avons besoin d'une chaîne aléatoire de caractères donnés.
private static final String mCHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
private static final int STR_LENGTH = 9; // длина генерируемой строки
Random random = new Random();

public void onClick(View view) {
    TextView infoTextView = (TextView) findViewById(R.id.textViewInfo);
    infoTextView.setText(createRandomString());
}

public String createRandomString() {
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < STR_LENGTH; i++) {
        int number = random.nextInt(mCHAR.length());
        char ch = mCHAR.charAt(number);
        builder.append(ch);
    }
    return builder.toString();
}

Comparaison de chaînes : equals()ou== ?

Regardons un exemple.
String str1 = "Murzik";
String str2 = new String(str1);
boolean isCat = str1 == str2;

infoTextView.setText(str1 + " == " + str2 + " -> " + isCat);
Bien que les deux variables contiennent le même mot, nous avons affaire à deux objets différents et l'opérateur ==renverra false . Un jour, alors que les arbres étaient grands, j'ai eu besoin de comparer deux chaînes provenant de sources différentes. Bien que les chaînes se ressemblent exactement, la comparaison utilisant l’opérateur ==a renvoyé faux et a confondu toutes les cartes pour moi. Et c'est seulement à ce moment-là que j'ai découvert que je devais utiliser le equals(). Une chaîne en Java est un objet distinct qui peut ne pas être identique à un autre objet, bien que le résultat de la chaîne puisse être identique à l'écran. C'est juste que Java, dans le cas de l'opérateur logique ==(ainsi que !=), compare les références aux objets (il n'y a pas de problème de ce type lorsque l'on travaille avec des primitives) :
String s1 = "hello";
String s2 = "hello";
String s3 = s1;
String s4 = "h" + "e" + "l" + "l" + "o";
String s5 = new String("hello");
String s6 = new String(new char[]{'h', 'e', 'l', 'l', 'o'});

infoTextView.setText(s1 + " == " + s2 + ": " + (s1 == s2));
// попробуйте и другие варианты
// infoTextView.setText(s1 + " equals " + s2 + ": " + (s1.equals(s2)));
// infoTextView.setText(s1 + " == " + s3 + ": " + (s1 == s3));
// infoTextView.setText(s1 + " equals " + s3 + ": " + (s1.equals(s3)));
// infoTextView.setText(s1 + " == " + s4 + ": " + (s1 == s4));
// infoTextView.setText(s1 + " equals " + s4 + ": " + (s1.equals(s4)));
// infoTextView.setText(s1 + " == " + s5 + ": " + (s1 == s5)); // false
// infoTextView.setText(s1 + " equals " + s5 + ": " + (s1.equals(s5)));
// infoTextView.setText(s1 + " == " + s6 + ": " + (s1 == s6)); // false
// infoTextView.setText(s1 + " equals " + s6 + ": " + (s1.equals(s6)));
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION