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


555

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

Ответы:


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" должен наградить вас множеством полезных резюме.



Прочитайте шаблон класса 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

36

"\\ s +" должен добиться цели


1
Почему + в конце?
Floella

4
@Anarelle повторяет захват пробела как минимум один раз и столько раз, сколько это возможно: см. Https://regex101.com/r/dT7wG9/1 или http://rick.measham.id.au/paste/explain. pl? regex = \ s% 2B или http://regexper.com/#^s%2B или http://www.myezapp.com/apps/dev/regexp/show.ws?regex=\s+&env= env_java
VonC

11

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

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking

это помогает мне!
Surasin Tancharoen



2

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

myString.split(/[\s\W]+/)

1

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

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

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

String textStr[] = yourString.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);

        } 
    }
}

Можете ли вы подробно описать свой ответ?
Стефан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.