Je crois que tout le monde utilise souvent la méthode split de String, mais avez-vous déjà rencontré la situation suivante :
Pensez au résultat de l'exécution du code suivant
public static void main(String[] args) { // TODO Auto-generated method stub String str1 = "a,b,c,,,a"; String str2 = "a,b,c,,,"; String str3 = "a,b,c, , ,"; String[] s1 = str1.split(","); String[] s2 = str2.split(","); String[] s3 = str3.split(","); System.out.println("str1长度:"+s1.length); System.out.println("str2长度:"+s2.length); System.out.println("str3长度:"+s3.length); }
Résultat de l'exécution :
Pourquoi un tel résultat se produit-il ? La recherche dans l'API a trouvé une solution
Solution :
En vérifiant l'API, nous avons constaté que notre méthode split couramment utilisée passe 0 par défaut. La solution pour résoudre le problème de la sortie str2 vide est de passer le deuxième paramètre sous forme de nombre négatif, c'est-à-dire
public static void main(String[] args) { // TODO Auto-generated method stub String str1 = "a,b,c,,,a"; String str2 = "a,b,c,,,"; String str3 = "a,b,c, , ,"; String[] s1 = str1.split(","); String[] s2 = str2.split(",",-1); String[] s3 = str3.split(",",-1); System.out.println("str1长度:"+s1.length); System.out.println("str2长度:"+s2.length); System.out.println("str3长度:"+s3.length); }
<.>
Après une recherche dans l'API, il a été constaté qu'il existe deux méthodes surchargées par division dans la classe String1.public String[] split(String regex)Selon le l'expression régulière donnée Match divise cette chaîne. Cette méthode agit comme appeler la méthode split à deux arguments avec l'expression donnée et l'argument de contrainte 0. Par conséquent, la chaîne vide de fin n’est pas incluse dans le tableau résultant. Par exemple, la chaîne "boo:and:foo" utilise ces expressions pour produire les résultats suivants : Résultats Regex: { "boo", "and", "foo" } o { "b", "", ":and:f" }Paramètres :
regex - expression régulière délimitée
renvoie :
un tableau de chaînes déterminé en divisant cette chaîne en fonction des correspondances de l'expression régulière donnée
renvoie :
PatternSyntaxException - Si la syntaxe du l'expression régulière n'est pas valide
: 2 { "boo", "and:foo" } : 5 { "boo", "and", "foo" } : -2 { "boo", "and", "foo" } o 5 { "b", "", ":and:f", "", "" } o -2 { "b", "", ":and:f", "", "" } o 0 { "b", "", ":and:f" }Str.split appelant cette méthode La forme (regex, n) produit exactement le même résultat que l'expression suivante : Pattern.compile(regex).split(str, n) Paramètres :
limit - seuil de résultat, comme ci-dessus
tableau de chaînes divisé en fonction des correspondances de l'expression régulière donnée Cette chaîne détermine
PatternSyntaxException - si la syntaxe de l'expression régulière n'est pas valide