Разделение строки с помощью разделителей слов - PullRequest
5 голосов
/ 09 июня 2011

у меня есть строка, как показано ниже

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

результат должен быть:

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

я хочу разбить строку при появлении «и», «или» и получитьdelims также вместе с токеном. [Они нужны мне для оценки выражения]

Я пытался использовать StringTokenizer как

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

, но я не получил желаемого результата.я попытался использовать сканер, так как

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

это можно разделить, но не возвращает разделители.

, пожалуйста, предложите.

Я дал a, b, c выше, нотам могут быть слова вместо a, b, c с пробелами.Обновленный пример.

Ответы [ 4 ]

3 голосов
/ 09 июня 2011

Это разделит на «и» или «или» с любым количеством пробелов, окружающих слова.

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

output

2 < 3
3 > 2
4 < 6
7 < 8
2 голосов
/ 09 июня 2011

Что вам действительно нужно, так это инструмент типа JFlex к тому времени, когда вы столкнетесь со всеми различными перестановками пробелов и с ростом синтаксиса.В конечном итоге вы сэкономите время.

2 голосов
/ 09 июня 2011
String delim = " ";
String[] splitstrings = yourString.split(delim);
for (int i = 0; i < splitstrings.length(); i++) {
    splitstrings += delim;
}
0 голосов
/ 09 июня 2011

StringTokenizer - единственный стандартный класс Java, который, насколько я знаю, способен возвращать использованный разделитель.Просто скопировал регулярное выражение из OT, предполагая, что оно будет делать то, что он хочет (что, на второй взгляд, я крайне сомневаюсь из его текстового описания, но, ну да ладно - просто вставьте правильное)

    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());
    }
...