- Méthodes
- Générer une chaîne aléatoire
- Comparaison de chaînes :
equals()
ou==
?
La classe est
String
très souvent utilisée par les programmeurs, elle doit donc être très bien apprise.
N'oubliez pas que les objets de classe
String
sont 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
StringBuffer
qui
StringBuilder
permettent de modifier une chaîne. Les classes
String
,
StringBuffer
,
StringBuilder
sont 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 vide
String
:
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
StringBuilder
des 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
$s
par des chaînes ou
$d
par 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));
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));
public int codePointCount(int start, int end)
Calcule le nombre de caractères Unicode entre les positions
start
et
end
String testString = "Котёнок";
int myChar = testString.codePointCount(0, 3);
tv.setText(String.valueOf(myChar));
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("котёнок"));
}
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 dans
CharSequence
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
Data
en 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
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);
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);
infoTextView.setText(strResult);
Pour une utilisation en majuscules , ce sera
%X
alors . Pour une utilisation en système décimal . La date peut également être affichée de différentes manières.
ff
FF
%d
Date now = new Date();
Locale locale = Locale.getDefault();
infoTextView.setText(
String.format(locale, "%tD\n", now) +
String.format(locale, "%tF\n", now) +
String.format(locale, "%tr\n", now) +
String.format(locale, "%tz\n", now) +
String.format(locale, "%tZ\n", now));
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 = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё")));
public int indexOf (int c, int start)
Recherche l'index à partir de la position
start
String testString = "котёнок";
infoTextView.setText(String.valueOf(testString.indexOf("ё", 4)));
public int indexOf (String string)
Recherche une chaîne de caractères
subString
String testString = "У окошка";
infoTextView.setText(String.valueOf(testString.indexOf("кошка")));
public int indexOf (String subString, int start)
Recherche une chaîne de caractères
subString
commençant à la position
start
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()) {
}
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()));
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
codePointOffset
aprè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
target
en
replacement
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*", "");
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
prefix
du 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
start
jusqu'à la fin de la ligne/se terminant par le caractère à position
end
. La nouvelle ligne contient des caractères de
start
la 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));
GO TO FULL VERSION