сплит Java - проблема с пространством - PullRequest
1 голос
/ 20 декабря 2010
 String[] t = a.slowa("a. R; er,  we p.");
   for (String w : t)
    System.out.println(w);
  }
 //...
  public String[] slowa(String s) {
   return s.split(" |\\.|,|\\;");
  }

вывод:

a

R

er


we
p

Почему пробелы - это новый мир?

1 Ответ

7 голосов
/ 20 декабря 2010

Вы сказали, что функция String#split разделяет на пробел или точку или запятую или точку с запятой.Вот что это сделано:

"a. R; er,  we p."
  ^^ ^^  ^^^  ^ ^
  || ||  |||  | |
  || ||  |||  | +--Split here
  || ||  |||  +----And here
  || ||  ||+-------And here
  || ||  |+--------And here
  || ||  +---------And here
  || |+------------And here
  || +-------------And here
  |+---------------And here
  +----------------And here

... потому что вы использовали чередование без квантификатора.Вы хотите сказать, разделить на любой из них:

return s.split("[ .,;]+");

, который использует класс символов ([...]) и квантификатор (+), так что более одногоподряд рассматривается как одно совпадение.Вы также можете сделать это с помощью квантификатора чередования + (вы должны обернуть чередование в группу без захвата: "(?: |\\.|,|\\;)+"), но использование класса символов будет чище.

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