separate example java string split

example - Cadena de división con | separador en java



split string java delimiter (11)

El parámetro para split método es una expresión regular, como puede leer here . Desde | Tiene un significado especial en expresiones regulares, necesitas escapar de él. El código se ve así (como otros ya han mostrado):

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

Tengo una cadena como esta: 1|"value"|;

Quiero dividir esa cadena y he elegido | como el separador.

Mi código se ve así:

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

Lo que obtengo es una matriz que contiene todos los caracteres como una entrada:

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

¿Alguien sabe por qué?
¿No puedo dividir una cadena con | ?


Escapar de la tubería. Funciona.

String.split("//|");

La tubería es un carácter especial en el regex que significa O


Intente esto: String[] separated = line.split("//|");

Mi respuesta es mejor. Corrigí la ortografía de "separados" :)

Además, la razón por la que esto funciona? | significa "O" en expresiones regulares. Necesitas escapar de ello.


No funcionará de esta manera, porque tienes que escapar de la tubería | primero. El siguiente código de ejemplo, que se encuentra en (http://www.rgagnon.com/javadetails/java-0438.html) muestra un ejemplo.

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] } }


String.split () usa expresiones regulares, por lo que necesita escapar de ''|'' como .split ("// |");


Tienes que escapar de la | Porque tiene un significado especial en una expresión regular. Echa un vistazo al método split(..) .

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

El segundo se usa para escapar de la | y el primer / se usa para escapar del segundo / :).


puede reemplazar la tubería con otro carácter como ''#'' antes de dividir, intente esto

String[] seperated = line.replace(''|'',''#'').split("#");


| significa O en expresiones regulares, debe escapar de ella. Es más, un solo ''/', obtienes ''/ |'' no significa nada en la cadena de Java. Así que también deberías escapar del ''/' en sí mismo, que produce ''/ |''.

¡Buena suerte!


| se trata como un OR en RegEx. Así que necesitas escapar de él:

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


Pattern.compile("|").splitAsStream(String you want to split).collect(Collectors.toList());


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; } }