45 votes

Délimiteur de chaîne dans la méthode string.split

J'ai les données suivantes :

 1||1||Abdul-Jabbar||Karim||1996||1974

Je veux délimiter les jetons.

Ici, le délimiteur est "||" .

Mon set de délimiteur est :

 public void setDelimiter(String delimiter) {
    char[] c = delimiter.toCharArray();
    this.delimiter = "\"" + "\\" + c[0] + "\\" + c[1] + "\"";
    System.out.println("Delimiter string is: " + this.delimiter);
}

Cependant,

 String[] tokens = line.split(delimiter);

ne donne pas le résultat demandé.

8voto

Mark Peters Points 42201

Les guillemets doubles sont interprétés comme des littéraux dans l'expression régulière ; ce ne sont pas des caractères spéciaux. Vous essayez de faire correspondre un littéral "||" .

Utilisez simplement Pattern.quote(delimiter) :

Comme demandé, voici une ligne de code (identique à celle de Sanjay)

 final String[] tokens = line.split(Pattern.quote(delimiter));

Si cela ne fonctionne pas, vous ne transmettez pas le bon délimiteur.

6voto

Yesh Points 133
String[] strArray= str.split(Pattern.quote("||"));

  1. str = "1||1||Abdul-Jabbar||Karim||1996||1974" ;
  2. Pattern.quote("||") ignorera le caractère spécial.
  3. La fonction .split divisera la chaîne pour chaque occurrence de ||.
  4. strArray aura le tableau de chaînes délimité par ||.

5voto

Nirmit Shah Points 535

Pipe (|) est un caractère spécial dans regex. pour y échapper, vous devez le préfixer avec une barre oblique inverse (\). Mais en Java, la barre oblique inverse est également un caractère d'échappement. donc encore une fois, vous devez l'échapper avec une autre barre oblique inverse. Donc, votre regex devrait être \\|\\| par exemple, String[] tokens = myString.split("\\|\\|");

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