Cet article présente les 10 questions les plus courantes sur String en Java :
1. Pour la comparaison de chaînes, devez-vous utiliser « ==" ou égal à () ?
En termes simples, "==" détermine si deux références font référence à la même adresse mémoire (le même objet physique).
Et égal détermine si les valeurs de deux chaînes sont égales.
Sauf si vous souhaitez déterminer si deux références de chaîne sont le même objet, vous devez toujours utiliser la méthode equals().
Vous comprendrez mieux ce problème si vous comprenez l'internement des chaînes
2. Pour les informations sensibles, pourquoi est-il préférable d'utiliser char[] plutôt que String ?
String est un objet immuable, ce qui signifie qu'une fois créé, l'objet entier ne peut pas être modifié. Même si un novice pense que la référence String a changé, il s'agit en fait simplement de la référence (pointeur) pointant vers un autre (nouvel) objet.
Les programmeurs peuvent modifier explicitement le tableau de caractères, de sorte que les informations sensibles (telles que les mots de passe) ne soient pas facilement exposées ailleurs (tant que vous définissez char[] sur 0 après utilisation).
3. Utiliser String comme condition de cas dans l'instruction switch ?
À partir du JDK7, cela est possible. Soit dit en passant, Java 6 et les versions précédentes ne le prennent pas en charge.
Copiez le code comme suit :
// Uniquement valable en Java 7 et supérieur !
commutateur (str.toLowerCase()) {
cas "a":
valeur = 1 ;
casser;
cas "b":
valeur = 2 ;
casser;
}
4. Convertir la chaîne en nombre
Pour les très grands nombres veuillez utiliser Long, le code est le suivant
Copiez le code comme suit :
int âge = Integer.parseInt("10");
long id = Long.parseLong("190"); // Si la valeur peut être grande.
5. Comment diviser une chaîne par caractères d'espacement
La chaîne reçue par la méthode split() de String sera analysée comme une expression régulière.
"/s" représente des caractères vides, tels que l'espace " ", la tabulation "/t", le saut de ligne "/n", le retour chariot "/r".
Lorsque le compilateur analyse le code source, il effectuera également un transcodage littéral, donc "//s" est nécessaire.
Copiez le code comme suit :
String[] strArray = aString.split("//s+");
6. Comment la méthode substring() est-elle traitée en interne ?
Dans JDK6, la méthode substring() partage toujours le tableau char[] d'origine et construit une "nouvelle" chaîne via le décalage et la longueur.
Si vous souhaitez que substring() obtienne un objet nouvellement créé, utilisez la méthode suivante :
Copiez le code comme suit :
String sub = str.substring(début, fin) + "" ;
Bien sûr, dans Java 7, substring() crée un nouveau tableau char[] au lieu de le partager.
Pour en savoir plus, veuillez vous référer à : méthode substring() et ses différences dans JDK6 et JDK7
7. Chaîne contre StringBuilder contre StringBuffer
StringBuilder est mutable, les valeurs internes peuvent donc être modifiées après la création.
StringBuffer est synchronisé et donc thread-safe, mais relativement moins efficace.
8. Comment épisser la même corde à plusieurs reprises ?
Option 1 : utilisez la classe utilitaire StringUtils de la bibliothèque Apache Commons Lang.
Copiez le code comme suit :
Chaîne str = "abcd" ;
Chaîne répétée = StringUtils.repeat(str,3);//abcdabcdabcd
Option 2 :
Utilisez le constructeur StringBuilder. Plus flexible.
Copiez le code comme suit :
Chaîne src = "nom" ;
int len = src.length();
int répétition = 5 ;
Générateur StringBuilder = new StringBuilder(len * répétition);
pour(int i=0; i<répétition; i++){
builder.append(src);
}
String dst = builder.toString();
9. Comment convertir une chaîne en date ?
Copiez le code comme suit :
Format SimpleDateFormat = new SimpleDateFormat("aaaa-MM-jj");
Chaîne str = "07/11/2013" ;
Date date = format.parse(str);
System.out.println(format.format(date));//2013-11-07
10. Comment compter le nombre de fois qu'un certain caractère apparaît ?
Utilisant également la classe StringUtils de la bibliothèque Apache Commons Lang :
Copiez le code comme suit :
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);