106 votes

Java divise une chaîne de caractères en tableau

J'ai besoin d'aide pour le split() méthode. Je dispose des éléments suivants String :

String values = "0|0|0|1|||0|1|0|||";

J'ai besoin de mettre les valeurs dans un tableau. Il y a 3 chaînes de caractères possibles : "0", "1" et "".

Mon problème est que, lorsque j'essaie d'utiliser split() :

String[] array = values.split("\\|"); 

Mes valeurs ne sont enregistrées que jusqu'au dernier 0. Il semble que la partie "|||" soit coupée. Qu'est-ce que je fais de mal ?

merci

149voto

Mark Rotteveel Points 20766

Ce comportement est explicitement documenté dans String.split(String regex) (c'est moi qui souligne) :

Cette méthode fonctionne comme si elle invoquait la méthode de division à deux arguments avec l'expression donnée et un argument limite de zéro. Chaînes vides à la fin sont donc non inclus dans le tableau résultant.

Si vous voulez que les chaînes vides soient incluses, vous devez utiliser la commande suivante String.split(String regex, int limit) avec une valeur négative pour le second paramètre ( limit ):

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

26voto

Lokesh Points 4092

Essayez ceci

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

13voto

S. Mayol Points 11

Prenons cet exemple :

public class StringSplit {
  public static void main(String args[]) throws Exception{
    String testString = "Real|How|To|||";
    System.out.println
       (java.util.Arrays.toString(testString.split("\\|")));
    // output : [Real, How, To]
  }
}

Le résultat n'inclut pas les chaînes vides entre le séparateur "|". Pour conserver les chaînes vides :

public class StringSplit {
  public static void main(String args[]) throws Exception{
    String testString = "Real|How|To|||";
    System.out.println
       (java.util.Arrays.toString(testString.split("\\|", -1)));
    // output : [Real, How, To, , , ]
  }
}

Pour plus de détails, consultez ce site web : http://www.rgagnon.com/javadetails/java-0438.html

1voto

Srinivas Points 1515

C'est attendu. Se référer à Javadocs pour split .

Splits this string around matches of the given regular expression.

Cette méthode fonctionne comme si elle invoquait la méthode split(java.lang.String,int) à deux arguments avec l'expression donnée et un argument limite de zéro. Les chaînes vides ne sont donc pas incluses dans le tableau résultant.

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