Java: Ssortingng split (): je veux qu’il inclue les chaînes vides à la fin

J’ai la chaîne suivante:

Ssortingng str = "\nHERE\n\nTHERE\n\nEVERYWHERE\n\n"; 

Si vous imprimez simplement ceci, cela sortirait comme ceci (Bien sûr, le \n ne serait pas “littéralement” imprimé):

 \n HERE\n \n THERE\n \n EVERYWHERE\n \n \n 

Lorsque j’appelle la méthode split("\n") , je veux que toutes les chaînes entre les nouvelles lignes ( \n ) contiennent des chaînes vides à la fin.

Par exemple, si je le fais aujourd’hui:

 Ssortingng strArray[] = str.split("\n"); System.out.println("strArray.length - " + strArray.length); for(int i = 0; i < strArray.length; i++) System.out.println("strArray[" + i + "] - \"" + strArray[i] + "\""); 

Je veux qu’il soit imprimé comme ceci (Sortie A):

 strArray.length - 8 strArray[0] - "" strArray[1] - "HERE" strArray[2] - "" strArray[3] - "THERE" strArray[4] - "" strArray[5] - "EVERYWHERE" strArray[6] - "" strArray[7] - "" 

Actuellement, il imprime comme ceci (Sortie B), et toutes les chaînes vides finales sont ignorées:

 strArray.length - 6 strArray[0] - "" strArray[1] - "HERE" strArray[2] - "" strArray[3] - "THERE" strArray[4] - "" strArray[5] - "EVERYWHERE" 

Comment faire pour que la méthode split() inclue les chaînes vides comme dans la sortie A? Bien sûr, je pouvais écrire un code de plusieurs lignes, mais je voulais savoir, avant de perdre mon temps à essayer de l’implémenter, s’il y avait une méthode simple ou quelques lignes de code supplémentaires pour m’aider. Merci!

utilisez str.split("\n", -1) (avec un argument limit négatif). Lorsque split zéro ou aucun argument de limit , il supprime les champs vides de fin, et lorsqu’il reçoit un argument de limit positif, il limite le nombre de champs à ce nombre, mais une limite négative permet d’autoriser n’importe quel nombre de champs . Ceci est documenté ici et le comportement provient de Perl.

La méthode split à un argument est spécifiée pour ignorer les séparations de chaînes vides restantes, mais la version qui prend un argument “limit” les conserve. Une option serait donc d’utiliser cette version avec une limite importante.

 Ssortingng strArray[] = str.split("\n", Integer.MAX_VALUE); 

Personnellement, j’aime bien l’utilitaire Guava pour le fractionnement:

 System.out.println(Iterables.toSsortingng( Splitter.on('\n').split(input))); 

Ensuite, si vous souhaitez configurer un comportement de chaîne vide, vous pouvez le faire:

 System.out.println(Iterables.toSsortingng( Splitter.on('\n').omitEmptySsortingngs().split(input)));