Как разделить строку с символами пробела в качестве разделителей? - PullRequest
528 голосов
/ 22 октября 2008

Какой шаблон регулярного выражения потребуется мне для перехода к методу java.lang.String.split(), чтобы разделить строку на массив подстрок, используя все пробельные символы ('', '\ t', '\ n' и т. Д.) В качестве разделителей?

Ответы [ 12 ]

920 голосов
/ 22 октября 2008

Что-то в строках

myString.split("\\s+");

Сгруппирует все пробелы в качестве разделителя.

Итак, если у меня есть строка:

"Hello[space][tab]World"

Это должно привести к строкам "Hello" и "World" и пропустить пустое пространство между [space] и [tab].

Как указал VonC, обратный слеш должен быть экранирован, потому что Java сначала попытается экранировать строку специальным символом и отправит для анализа . То, что вы хотите, это литерал "\s", что означает, что вам нужно передать "\\s". Это может немного запутать.

\\s эквивалентно [ \\t\\n\\x0B\\f\\r]

85 голосов
/ 22 октября 2008

В большинстве диалектов регулярных выражений есть набор удобных кратких описаний символов, которые вы можете использовать для такого рода вещей - вот те, которые нужно запомнить:

\w - Соответствует любому символу слова.

\W - Соответствует любому несловесному символу.

\s - Соответствует любому символу пробела.

\S - Совпадает с любым символом, кроме пробелов.

\d - соответствует любой цифре.

\D - Совпадает с чем угодно, кроме цифр.

Поиск "Regex Cheatsheets" должен наградить вас множеством полезных резюме.

61 голосов
/ 02 марта 2012

Чтобы заставить это работать в Javascript , мне пришлось сделать следующее:

myString.split(/\s+/g)
35 голосов
/ 22 октября 2008

"\\ s +" должен сделать трюк

10 голосов
/ 31 марта 2016
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
10 голосов
/ 09 сентября 2014

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

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
8 голосов
/ 01 декабря 2013

В Apache Commons Lang есть метод разделения строки с пробельными символами в качестве разделителей:

StringUtils.split("abc def")

http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#split(java.lang.String)

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

2 голосов
/ 13 марта 2018

Я удивлен, что никто не упомянул String.split () без параметров. Разве не для этого это сделано? как в:

"abc def ghi".split()
2 голосов
/ 14 февраля 2012

Поскольку это регулярное выражение, и я предполагаю, что вам также не понадобятся не алфавитно-цифровые символы, такие как запятые, точки и т. Д., Которые могут быть окружены пробелами (например, «один, два» должны давать [один] [два] ]), должно быть:

myString.split(/[\s\W]+/)
1 голос
/ 12 апреля 2015
String str = "Hello   World";
String res[] = str.split("\\s+");
...