Строковый разделенный вопрос с использованием "*" - PullRequest
15 голосов
/ 20 августа 2009

Допустим, есть строка ...

String myString =  "my*big*string*needs*parsing";

Все, что я хочу, это разделить строку на «мои», «большие», «строки» и т. Д. Поэтому я стараюсь

myString.split("*");

возвращает java.util.regex.PatternSyntaxException: висячий метасимвол '*' рядом с индексом 0

* - это специальный символ в регулярном выражении, поэтому я пытаюсь сбежать ....

myString.split("\\*");

То же исключение. Я полагал, что кто-то знает быстрое решение. Спасибо.

Ответы [ 6 ]

21 голосов
/ 20 августа 2009

split("\\*") работает со мной.

5 голосов
/ 20 августа 2009

Один escape \ не сработает в Java 6 на Mac OSX, поскольку \ зарезервировано для \b \t \n \f \r \'\" и \\. То, что у вас, похоже, работает для меня:

public static void main(String[] args) {
    String myString =  "my*big*string*needs*parsing";
    String[] a = myString.split("\\*");
    for (String b : a) {
        System.out.println(b);
    }
}

выходы:

my
big
string
нужно
синтаксический анализ

1 голос
/ 20 августа 2009

http://arunma.com/2007/08/23/javautilregexpatternsyntaxexception-dangling-meta-character-near-index-0/

Должен делать именно то, что вам нужно.

0 голосов
/ 10 июня 2012

Это происходит потому, что метод split принимает регулярное выражение, а не обычную строку.

Символ '*' означает совпадение с предыдущим символом ноль или более раз, поэтому его нельзя указывать самостоятельно.

Так что это должно быть экранировано, как в следующем

split("\\*")

0 голосов
/ 21 августа 2009

Вы также можете использовать StringTokenizer .

 StringTokenizer st = new StringTokenizer("my*big*string*needs*parsing", "\*");
 while (st.hasMoreTokens()) {
     System.out.println(st.nextToken());
 }
0 голосов
/ 20 августа 2009

myString.split("\\*"); отлично работает на Java 5. Какой JRE вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...