2011-06-08 12 views
5

i tiene una cadena como a continuacióndividiendo una cadena con Word delimitadores

a > b and c < d or d > e and f > g 

resultado debe ser:

a > b 
and 
c < d 
or 
d > e 
and 
f > g 

quiero dividir la cadena en las apariciones de "y", "o" y recuperar los delims también junto con el token. [los necesito a fin de evaluar la expresión]

he intentado utilizar StringTokenizer como

new StringTokenizer(x, "\\sand\\s|\\sor\\s", true); 

pero no me llevo resultado deseado. He intentado utilizar el escáner como

Scanner sc = new Scanner(x); 
     sc.useDelimiter("and | or"); 

éste es capaz de dividir pero tampoco devolver los delimitadores.

sugerir por favor.

i he dado a, b, c arriba pero hay bolo alimenticio ser palabras en lugar de a, b, c con espacios. Ejemplo actualizado.

+0

Su descripción implica el uso de la Las cadenas "y" y "o" como delimitadores, pero su resultado implica "" como delimitador. Por favor aclara – djg

+0

doh! i dar mal ejemplo como string..let me dan otro ejemplo – jch

+0

http://stackoverflow.com/questions/3777546/how-can-i-split-a-string-in-java-and-retain-the-delimiters – JustinKSU

Respuesta

2
String delim = " "; 
String[] splitstrings = yourString.split(delim); 
for (int i = 0; i < splitstrings.length(); i++) { 
    splitstrings += delim; 
} 
+0

OP quiere que los delims sean devueltos también. 'split' no devolverá losims. – CoolBeans

+0

i ddint explicar claramente ... he actualizado el ejemplo ahora. – jch

+0

Lo siento, pero no creo que esa es la derecha .. – jch

2

Lo que realmente quiere es una herramienta como JFlex por la vez que se ejecuta en todas las diferentes permutaciones de los espacios en blanco y que su sintaxis crece. A la larga, ahorrarás tiempo.

3

Esto dividirá en "y" u "o" con cualquier número de espacios que rodean las palabras.

String test = "2 < 3 and 3 > 2 or 4 < 6 and 7 < 8"; 

    String [] splitString = test.split("\\s*[and|or]+\\s*"); 
    for(int i = 0; i < splitString.length ; i ++){ 
     System.out.println(splitString[i]); 
    } 

salida

2 < 3 
3 > 2 
4 < 6 
7 < 8 
+0

cómo obtener el delimitador así? – jch

0

Un StringTokenizer es la única clase estándar de Java que es capaz de devolver el delimitador utilizado, así como lo que yo soy consciente. Acaba de copiar la expresión regular del AT asumiendo que va a hacer lo que quiere (que en la segunda mirada me extremadamente duda de su descripción textual, pero bueno - sólo tiene que insertar la correcta)

String input = "a > b and c < d or d > e and f > g"; 
    StringTokenizer tokenizer = new StringTokenizer(input, "\\sand\\s|\\sor\\s", true); 
    while (tokenizer.hasMoreTokens()) { 
     System.out.println(tokenizer.nextToken()); 
    } 
Cuestiones relacionadas