2017-01-22 2 views
0

Я хочу найти все разделители между словами в предложении, которые могут быть пробелами, символами новой строки.Split String, чтобы получить разделители слов

Скажем, у меня есть следующие строки:

String text = "hello, darkness my old friend.\nI've come to you again\r\nasd\n 123123"; 

String[] separators = text.split("\\S+"); 

Выход: [, , , , , , , , , , , ]

Так что я разделить на что угодно, но в пространстве она возвращается пустой разделитель в первой, а остальные хорошие. Почему пустая строка сначала?

Кроме того, я хотел бы разделить на периоды и запятые. Но я не знаю, как это сделать, что ".\n" является разделителем.

Wanted Вывод для приведенных выше строк:

separators = {", ", " ", " ", " ", ".\n", " ", " ", " ", " ", "\r\n", "\n "} 

или

separators = {",", " ", " ", " ", " ", ".", "\n", " ", " ", " ", " ", "\r\n", "\n "} 
+0

Для точки и новой строки вам нужно будет избежать их, например. '\\.' и '\\ n' –

+0

Вы можете попробовать использовать [StringTokenizer] (https://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html). –

+0

Возможный дубликат [Java String.split() иногда дает пустые строки] (http://stackoverflow.com/questions/18870699/java-string-split-sometimes-giving-blank-strings). Просто для вашего первого вопроса, но там вы идете, идеальная причина, чтобы только * спрашивать * по одному за раз. – usr2564301

ответ

0

Попробуйте это:

String[] separators = text.split("[\\w']+"); 

Это определяет не разделители как «словарные символы» и/или апострофы.

Это оставит ведущий пробел в результирующем массиве, который не удается избежать, за исключением удаления ведущего слова первым:

String[] separators = text.replaceAll("^[\\w']+", "").split("[\\w']+"); 

Вы можете рассмотреть возможность добавления дефиса к классу символов, если вы рассмотрим дефис слова (например, в предыдущем предложении) как одно слово, т.е.

String[] separators = text.split("[\\w'-]+"); 

См live demo.

0

Я думаю, что это также может работать правильно:

String[] separators = text.split("\\w+");

+0

это хорошо, но он возвращает '' '/: – user640853

0

Если думает, что это более простой в использовании метода .find() для получения желаемого результата:

String text = "hello, darkness my old friend.\nI've come to you again\r\nasd\n 123123"; 

String pat = "[\\s,.]+"; // add all that you need to the character class 
Matcher m = Pattern.compile(pat).matcher(text); 

List<String> list = new ArrayList<String>(); 

while(m.find()) { 
    list.add(m.group()); 
} 

// the result is already stored in "list" but if you 
// absolutely want to store the result in an array, just do: 

String[] result = list.toArray(new String[0]); 

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

Смежные вопросы