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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
568
0
695 093
13
Перейти к ответу Данный вопрос помечен как решенный

Ответы 13

"\\ s +" должно помочь

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

Floella 23.01.2016 00:50

@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 23.01.2016 08:59

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

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

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

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

\S - соответствует всем, кроме символов пробела.

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

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

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

Полезная ссылка: docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/…

Michaël 08.05.2012 13:05

Чтение класса шаблона JavaDoc: docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.ht‌ ml

Christophe Roussy 22.07.2015 12:25
Ответ принят как подходящий

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

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

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

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

"Hello[space character][tab character]World"

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

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

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

Спасибо за напоминание. Я просто кодировал от бедра :)

Henrik Paul 22.10.2008 15:39

Обратите внимание, что сначала вам нужно trim(): trim().split("\\s++") - в противном случае, например разделение `a b c` сначала выдаст две пустые строки.

Marcus Junius Brutus 09.07.2014 13:23

Почему вы использовали четыре обратной косой черты в конце вашего ответа? т.е. "\\\\s"?

Michael Borkowski 15.03.2015 18:43

"" .trim (). split ("\\ s +") - разделение пустой строки дает длину 1. "term" .trim (). split ("\\ s +") - также дает длину 1 .

PaulSchell 08.08.2015 20:13

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

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

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

myString.split(/\s+/g)

Это в Javascript. Я тоже не обращал внимания :)

miracle2k 11.05.2012 00:52

Ой. Виноват. Возможно, этот ответ по-прежнему поможет некоторым другим, кто наткнется на эту ветку в поисках ответа Javascript. :-)

Mike Manard 07.09.2012 23:00

Ха-ха, я искал ответ для JavaScript, случайно наткнулся на этот вопрос, а потом заметил ваш ответ перед тем, как уйти. +1.

Kris 02.08.2014 02:00

Замечательно! Я рад слышать, что этот ответ оказался полезным для кого-то, даже если он ответил не на тот вопрос. :-)

Mike Manard 08.10.2014 18:28

Это мне тоже очень помогло, нужно было разбить аргументы сервера :)

amyiris 01.03.2020 00:40

В 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)

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

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

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

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

String textStr[] = yourString.split("\\s+");

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

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

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

Surasin Tancharoen 29.01.2017 01:53

На самом деле я тоже. Я нашел этот символ в ответе ElasticSearch, когда пытался обновить псевдонимы индекса. Простой \\ s + не дал желаемого эффекта.

Investigator 26.02.2021 16:56
String str = "Hello   World";
String res[] = str.split("\\s+");
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");

@ Стефан, я их не видел.

Arrow 22.11.2016 15:12

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

    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);

        } 
    }
}

Не могли бы вы подробно ответить?

Stephan 03.11.2016 16:09

Чтобы разделить строку с помощью любые пробелы Unicode, вам нужно использовать

s.split("(?U)\\s+")
         ^^^^

Параметр встроенного встроенного флага (?U) является эквивалентом Pattern.UNICODE_CHARACTER_CLASS, который позволяет классу сокращенных символов \s соответствовать любым символам из категории пробелов Unicode.

Если вы хотите разделить пробелами и оставьте пробелы в результирующем массиве, используйте

s.split("(?U)(?<=\\s)(?=\\S)|(?<=\\S)(?=\\s)")

См. демонстрация регулярного выражения. См. Демонстрация Java:

String s = "Hello\t World\u00A0»";
System.out.println(Arrays.toString(s.split("(?U)\\s+"))); // => [Hello, World, »]
System.out.println(Arrays.toString(s.split("(?U)(?<=\\s)(?=\\S)|(?<=\\S)(?=\\s)")));
// => [Hello,    , World,  , »]

Все, что тебе нужно для разделения с использованием одного из специальных символов Java Ragex Engine,

и это- Символ белого пространства

  • \ d представляет собой цифру: [0-9]
  • \ D Представляет нецифровую: [^0-9]
  • \ s Представляет пробельный символ, включая [ \t\n\x0B\f\r]
  • \ S представляет непробельный символ как [^\s]
  • \ v Представляет вертикальный пробельный символ как [\n\x0B\f\r\x85\u2028\u2029]
  • \ V Представляет невертикальный пробельный символ как [^\v]
  • \ w Представляет символ слова как [a-zA-Z_0-9]
  • \ W представляет символ, не являющийся словом, как [^\w]

Здесь ключевой момент, о котором следует помнить, заключается в том, что символ маленькой буквы \s представляет все типы пробелов, включая одиночный пробел [ ], символы табуляции [ ] или что-либо подобное.

Итак, если вы попробуете, будет что-то вроде этого -

String theString = "Java<a space><a tab>Programming"
String []allParts = theString.split("\\s+");

Вы получите желаемый результат.


Некоторые очень полезные ссылки:


Надеюсь, это поможет вам лучше всего !!!

Другие вопросы по теме