Как разделить строку с любыми пробельными символами в качестве разделителей

555

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

mcjabberz
источник

Ответы:

955

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

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

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

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

"Hello[space][tab]World"

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

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

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

Хенрик Пол
источник
1
Спасибо за это напоминание. Я просто кодирую с бедра :)
Хенрик Пол
34
Обратите внимание, что вам нужно trim()сначала: trim().split("\\s++")- в противном случае, например, разделение `abc` сначала выдаст две пустые строки.
Маркус Юний Брут
Почему вы использовали четыре обратных слеша в конце своего ответа? то есть. "\\\\s"?
Михаил Борковский
"" .trim (). split ("\\ s +") - пустая строка split дает длину 1. "term" .trim (). split ("\\ s +") - также длина 1 .
PaulSchell
88

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

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

\W - Соответствует любому несловесному персонажу.

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

\S - Совпадает с чем угодно, кроме пробелов.

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

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

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

glenatron
источник
2
Полезная ссылка: docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/…
Микаэль
Прочитайте шаблон класса JavaDoc: docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
Кристоф Русси,
64

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

myString.split(/\s+/g)
Майк Манард
источник
15
Это в Javascript. Я тоже не обращал внимания :)
miracle2k
14
К сожалению. Моя ошибка. Возможно, этот ответ все еще поможет некоторым другим, которые натыкаются на эту тему, ища ответ Javascript. :-)
Майк Манард
Хаха, я искал ответ для JavaScript, случайно наткнулся на этот вопрос и потом заметил твой ответ, прежде чем я ушел. +1.
Крис
Замечательно! Я рад слышать, что этот ответ оказался полезным для кого-то, даже если он ответил на неправильный вопрос. :-)
Майк Манард
Это мне тоже очень помогло, нужно было разделить аргументы сервера :)
ProgrammerPlays
11

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

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
jake_astub
источник
это помогает мне!
Surasin Tancharoen
10
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
Стрела
источник
@ Стефан, я их не видел.
Стрелка
2

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

myString.split(/[\s\W]+/)
Rishabh
источник
1

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

 String textStr[] = yourString.split("\\r?\\n");

Вы можете разделить строку по пробелам, используя следующую инструкцию:

String textStr[] = yourString.split("\\s+");
RajeshVijayakumar
источник
1
String str = "Hello   World";
String res[] = str.split("\\s+");
Оливия Ляо
источник
-1

Изучите этот код .. удачи

    import java.util.*;
class Demo{
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        System.out.print("Input String : ");
        String s1 = input.nextLine();   
        String[] tokens = s1.split("[\\s\\xA0]+");      
        System.out.println(tokens.length);      
        for(String s : tokens){
            System.out.println(s);

        } 
    }
}
Рисит Рависара
источник
Можете ли вы подробно описать свой ответ?
Стефан