web-dev-qa-db-fra.com

Java scinder la chaîne en tableau

J'ai besoin d'aide avec la méthode split(). J'ai ce qui suitString:

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

Je dois mettre les valeurs dans un tableau. Il y a 3 chaînes possibles: "0", "1" et ""

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

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

Mes valeurs ne sont enregistrées que jusqu'au dernier 0. On dirait que la partie "|||" se coupe. Qu'est-ce que je fais mal?

merci

88
Dusan

Ce comportement est explicitement décrit dans String.split(String regex) (emphase mienne):

Cette méthode fonctionne comme si elle invoquait la méthode de scission à deux arguments avec l'expression donnée et un argument limit égal à zéro. Les chaînes finales vides sont donc non incluses dans le tableau résultant.

Si vous souhaitez que ces dernières chaînes vides soient incluses, vous devez utiliser String.split(String regex, int limit) avec une valeur négative pour le deuxième paramètre (limit):

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

Essaye ça

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

Considérons 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 les "|" séparateur. Pour garder 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, visitez ce site: http://www.rgagnon.com/javadetails/Java-0438.html

8
S. Mayol

Ceci est prévu. Reportez-vous à Javadocs pour split.

Splits this string around matches of the given regular expression.

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

1
Srinivas