Je crois que tout le monde utilise souvent la méthode divisée de la chaîne, mais avez-vous rencontré les situations suivantes:
Tout le monde pense à ce qui est le résultat d'exécution de code suivant
Public static void main (String [] args) {// TODO Auto-Generatd Méthode Stub String Str1 = "A, B, C, A"; , b, c ,,, ""; string [] s1 = str1.split (",", "); string [] s2 = str2.split (", "); string [] s3 = str3.split (" "" "" ","); Longueur de str3: "+" + s3.length);}
Résultats de l'exécution:
Pourquoi ce résultat apparaît-il?
Solution:
En visualisant l'API, nous avons constaté que notre méthode divisée couramment utilisée est transmise par 0 par défaut.
Public static void main (String [] args) {// TODO Auto-Generatd Méthode Stub String Str1 = "A, B, C, A"; , b, c ,,, ""; string [] s1 = str1.split (","); string [] s2 = str2.split (",", - 1); string [] s3 = str3. Split (",", -1); "Str3 Longueur:" + S3.Length);}
Après avoir trouvé l'API, j'ai découvert que dans la classe de chaînes, il existe deux méthodes de charge lourde divisée
1. Public String [] Split (String Regex)
Ces chaînes sont divisées en fonction de l'expression régulière donnée.
Le rôle de cette méthode est comme utiliser une expression donnée et limiter le paramètre 0 pour appeler la méthode de division à deux paramètres. Par conséquent, le tableau n'inclut pas la chaîne End-Empty.
Par exemple, la chaîne "BOO: et: foo" peut générer les résultats suivants:
Résultats regex
: {"Boo", "et", "foo"} o {"b", "", ": et: f"}
paramètre:
Expression régulière de la loi figex-fixe Renvoie:
Le tableau de chaîne, qui est jeté en fonction de la correspondance de l'expression d'expression régulière pour diviser cette chaîne:
PatternSyntaxException - Si la grammaire dans l'expression régulière n'est pas valide
2. Public String [] Split (String Regex, int limit)
Ces chaînes sont divisées en fonction de l'expression régulière donnée par correspondance.
Le tableau renvoyé par cette méthode contient le sous-string de cette chaîne. Le sous-string dans le tableau est organisé dans l'ordre dans lequel ils apparaissent dans cette chaîne. Si l'expression ne correspond à aucune partie de l'entrée, le tableau de revenu n'a qu'un seul élément, c'est-à-dire cette chaîne.
Limiter les applications de mode de contrôle des paramètres, affectant ainsi la longueur du tableau. Si cette limite N est supérieure à 0, le mode sera utilisé la plupart des n-once, et la longueur du tableau ne sera pas supérieure à N, et le dernier élément du tableau contiendra toutes les entrées au-delà de la limite de correspondance finale. Si n n'est pas positif, le mode sera utilisé autant que possible et le tableau peut être n'importe quelle longueur. Si n est 0, le mode sera utilisé autant que possible, le tableau peut être une longueur et la chaîne End-Empty sera rejetée.
Par exemple, la chaîne "BOO: et: foo" peut générer les résultats suivants avec ces paramètres:
Résultats regexlimit
: 2 {"boo", "et: foo"}: 5 {"boo", "et", "foo"}: -2 {"boo", "et", "foo"} o 5 {"b" "", ": et: f", "", "} o -2 {" b "," ",": et: f "," ","} o 0 {"b", "": et: f "}
La forme de str.split (regex, n) qui appelle cette méthode est exactement la même que les résultats produits par les expressions suivantes:
Pattern.Compile (regex) .split (str, n)
paramètre:
Expression régulière de la définition de la définition
SEFFRANT DE RÉSULTAT-LIMIT, comme décrit ci-dessus
retour:
Le réseau de chaînes, il est déterminé en fonction de la correspondance de l'expression d'expression régulière.
Jetant:
PatternSyntaxException - Si la grammaire dans l'expression régulière n'est pas valide