Split string avec / separator en java

j'ai une chaîne qui est comme ceci: 1|"value"|;

je veux partager cette chaîne et j'ai choisi | comme séparateur.

Mon code ressemble à ceci:

String[] separated = line.split("|");

ce que j'obtiens est un tableau qui contient tous les caractères comme une seule entrée:

separated[0] = ""
separated[1] = "1"
separated[2] = "|"
separated[3] = """
separated[4] = "v"
separated[5] = "a"
...

quelqu'un sait-il pourquoi?

Je ne peux pas couper une corde avec |?

28
demandé sur Prexx 2011-06-10 15:25:51

11 réponses

| est traité comme un OR dans la RegEx. Si vous avez besoin d'échapper à ça:

String[] separated = line.split("\|");
68
répondu Talha Ahmed Khan 2014-03-06 22:52:52

Vous avez pour échapper à l' | parce qu'il a un sens particulier dans un regex. Jetez un oeil à l' split(..) méthode.

String[] sep = line.split("\|");

deuxième \ est utilisé pour échapper à l' | et le premier \ est utilisé pour échapper à la deuxième \:).

10
répondu Kevin 2011-06-10 11:29:15

Le paramètre split méthode est une expression régulière, comme vous pouvez le lire ici. Depuis | a un sens particulier dans les expressions régulières, vous devez y échapper. Le code ressemble alors à ceci (comme d'autres l'ont déjà montré):

String[] separated = line.split("\|");
4
répondu Yoni 2011-06-10 11:32:22

essaye ceci: String[] separated = line.split("\|");

ma réponse est meilleure. J'ai corrigé l'orthographe de "séparé" :)

aussi, la raison pour laquelle cela fonctionne? | signifie " ou " dans regex. Vous devez vous échapper.

3
répondu Bohemian 2011-06-10 11:27:31

Échapper à la pipe. Elle fonctionne.

String.split("\|");

La pipe est un caractère spécial dans les regex sens OU

3
répondu Suraj Chandran 2011-06-10 11:29:56

cela ne marchera pas de cette façon, parce que vous devez échapper à la Pipe | d'abord. Le code échantillon suivant, trouvé à (http://www.rgagnon.com/javadetails/java-0438.html) montre un exemple.

public class StringSplit {
  public static void main(String args[]) throws Exception{
    String testString = "Real|How|To";
    // bad
    System.out.println(java.util.Arrays.toString(
        testString.split("|")
    ));
    // output : [, R, e, a, l, |, H, o, w, |, T, o]

    // good
    System.out.println(java.util.Arrays.toString(
      testString.split("\|")
    ));
    // output : [Real, How, To]
  }
}
3
répondu Ria 2011-06-10 11:32:32

Chaîne de caractères.split () utilise regex, vous devez donc échapper au '|' like .split("\\|");

2
répondu Karl-Bjørnar Øie 2011-06-10 11:28:13

Vous pouvez remplacer la pipe par un autre caractère comme ' # ' avant de vous séparer, essayez ceci

String[] seperated = line.replace('|','#').split("#");
2
répondu Josh 2014-03-24 01:27:17

/ signifie ou dans regex, vous devriez y échapper. Qui plus est, un simple"\", vous obtenez "\ | " signifie rien dans la chaîne Java. Vous devez donc également échapper au ' \ 'Lui-même, qui donne'\|'.

Bonne chance!

0
répondu Summer_More_More_Tea 2011-06-10 11:32:50
public class StringUtil {

  private static final String HT = "\t";
  private static final String CRLF = "\r\n";

  // This class cannot be instantiated
  private StringUtil() {
  }

  /**
   * Split the string into an array of strings using one of the separator in
   * 'sep'.
   * 
   * @param s
   *            the string to tokenize
   * @param sep
   *            a list of separator to use
   * 
   * @return the array of tokens (an array of size 1 with the original string
   *         if no separator found)
   */
  public static String[] split(final String s, final String sep) {
    // convert a String s to an Array, the elements
    // are delimited by sep
    final Vector<Integer> tokenIndex = new Vector<Integer>(10);
    final int len = s.length();
    int i;

    // Find all characters in string matching one of the separators in 'sep'
    for (i = 0; i < len; i++)
      if (sep.indexOf(s.charAt(i)) != -1)
        tokenIndex.addElement(new Integer(i));

    final int size = tokenIndex.size();
    final String[] elements = new String[size + 1];

    // No separators: return the string as the first element
    if (size == 0)
      elements[0] = s;
    else {
      // Init indexes
      int start = 0;
      int end = (tokenIndex.elementAt(0)).intValue();
      // Get the first token
      elements[0] = s.substring(start, end);

      // Get the mid tokens
      for (i = 1; i < size; i++) {
        // update indexes
        start = (tokenIndex.elementAt(i - 1)).intValue() + 1;
        end = (tokenIndex.elementAt(i)).intValue();
        elements[i] = s.substring(start, end);
      }
      // Get last token
      start = (tokenIndex.elementAt(i - 1)).intValue() + 1;
      elements[i] = (start < s.length()) ? s.substring(start) : "";
    }

    return elements;
  }

}
0
répondu Ashok Domadiya 2012-07-09 09:24:05
Pattern.compile("|").splitAsStream(String you want to split).collect(Collectors.toList());
0
répondu Chinniah Annamalai 2018-06-14 17:04:33