373 votes

Java String split supprimé des valeurs vides

J'essaie de diviser la valeur à l'aide d'un séparateur. Mais je trouve les résultats surprenants

 String data = "5|6|7||8|9||";
String[] split = data.split("\\|");
System.out.println(split.length);
 

Je m'attends à obtenir 8 valeurs. [5,6,7, VIDE, 8,9, VIDE, VIDE] Mais je n'obtiens que 6 valeurs.

Toute idée et comment y remédier. Peu importe que la valeur EMPTY vienne n'importe où, elle devrait être en tableau.

632voto

jlordo Points 22012

essayer

 String[] split = data.split("\\|", -1);
 

Le comportement du second paramètre est décrit dans JavaDoc de String#split(String regex, int limit)

38voto

ppeterka Points 12141

À partir de la documentation de l' String.split(String regex):

Cette méthode fonctionne comme si, en invoquant les deux arguments d'une méthode split avec l'expression donnée et une limite argument de zéro. Traînant des chaînes vides sont donc pas inclus dans le tableau résultant.

Donc, vous devrez utiliser les deux argument de la version String.split(String regex, int limit) avec une valeur négative:

String[] split = data.split("\\|",-1);

Doc:

Si la limite n est supérieur à zéro, alors que le motif sera appliquée au plus n - 1 fois, la longueur du tableau ne sera pas supérieure à n, et le tableau de la dernière entrée contiendra tous les commentaires au-delà de la dernière correspondance délimiteur. Si n est non-positive alors que le motif sera appliquée autant de fois que possible et le tableau peut avoir n'importe quelle longueur. Si n est égal à zéro alors que le motif sera appliquée autant de fois que possible, le tableau peut avoir n'importe quelle longueur, et de fuite des chaînes vides seront rejetées.

Ce ne sera pas quitter les éléments vides, y compris la fuite.

5voto

PermGenError Points 26936

À Partir De La Chaîne.split() de l'API Doc:

Divise cette chaîne autour de matchs de l'expression régulière donnée. Cette méthode fonctionne comme si, en invoquant les deux arguments d'une méthode split avec l'expression donnée et une limite argument de zéro. De fuite vide les chaînes sont donc pas inclus dans le tableau résultant.

Surchargé De Chaîne.split(regex, int) est plus approprié pour votre cas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X