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




"\\ s +" должно помочь
@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
В большинстве диалектов регулярных выражений есть набор удобных описаний символов, которые вы можете использовать для такого рода вещей - их следует запомнить:
\w - соответствует любому символу слова.
\W - соответствует любому символу, не являющемуся словом.
\s - соответствует любому символу пробела.
\S - соответствует всем, кроме символов пробела.
\d - соответствует любой цифре.
\D - соответствует чему угодно, кроме цифр.
Поиск "Regex Cheatsheets" должен вознаградить вас множеством полезных резюме.
Полезная ссылка: docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/…
Чтение класса шаблона JavaDoc: docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.ht ml
Что-то в строках
myString.split("\\s+");
Это группирует все пробелы как разделитель.
Итак, если у меня есть строка:
"Hello[space character][tab character]World"
Это должно привести к строкам "Hello" и "World" и пропустить пустое пространство между [space] и [tab].
Как указал VonC, обратную косую черту следует экранировать, потому что Java сначала попытается преобразовать строку в специальный символ и отправить который для анализа. Вам нужен буквальный "\s", что означает, что вам нужно передать "\\s". Это может немного запутать.
\\s эквивалентен [ \\t\\n\\x0B\\f\\r].
Спасибо за напоминание. Я просто кодировал от бедра :)
Обратите внимание, что сначала вам нужно trim(): trim().split("\\s++") - в противном случае, например разделение `a b c` сначала выдаст две пустые строки.
Почему вы использовали четыре обратной косой черты в конце вашего ответа? т.е. "\\\\s"?
"" .trim (). split ("\\ s +") - разделение пустой строки дает длину 1. "term" .trim (). split ("\\ s +") - также дает длину 1 .
Поскольку это регулярное выражение, и я предполагаю, что вам также не нужны не буквенно-цифровые символы, такие как запятые, точки и т. д., Которые могут быть окружены пробелами (например, «один, два» должно давать [один] [два]), должен быть:
myString.split(/[\s\W]+/)
Чтобы заставить этот рабочий в Javascript, мне пришлось сделать следующее:
myString.split(/\s+/g)
Это в Javascript. Я тоже не обращал внимания :)
Ой. Виноват. Возможно, этот ответ по-прежнему поможет некоторым другим, кто наткнется на эту ветку в поисках ответа Javascript. :-)
Ха-ха, я искал ответ для JavaScript, случайно наткнулся на этот вопрос, а потом заметил ваш ответ перед тем, как уйти. +1.
Замечательно! Я рад слышать, что этот ответ оказался полезным для кого-то, даже если он ответил не на тот вопрос. :-)
Это мне тоже очень помогло, нужно было разбить аргументы сервера :)
В Apache Commons Lang есть метод разделения строки с пробелами в качестве разделителей:
StringUtils.split("abc def")
Это может быть проще в использовании, чем шаблон регулярного выражения.
вы можете разделить строку по разрыву строки, используя следующий оператор:
String textStr[] = yourString.split("\\r?\\n");
вы можете разделить строку по пробелу, используя следующий оператор:
String textStr[] = yourString.split("\\s+");
Также у вас может быть неразрывный пробел UniCode xA0 ...
String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
это мне помогает!
На самом деле я тоже. Я нашел этот символ в ответе ElasticSearch, когда пытался обновить псевдонимы индекса. Простой \\ s + не дал желаемого эффекта.
String str = "Hello World";
String res[] = str.split("\\s+");
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
@ Стефан, я их не видел.
Изучите этот код .. удачи
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);
}
}
}
Не могли бы вы подробно ответить?
Чтобы разделить строку с помощью любые пробелы 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,
и это- Символ белого пространства
[0-9][^0-9][ \t\n\x0B\f\r][^\s][\n\x0B\f\r\x85\u2028\u2029][^\v][a-zA-Z_0-9][^\w]Здесь ключевой момент, о котором следует помнить, заключается в том, что символ маленькой буквы \s представляет все типы пробелов, включая одиночный пробел [ ], символы табуляции [ ] или что-либо подобное.
Итак, если вы попробуете, будет что-то вроде этого -
String theString = "Java<a space><a tab>Programming"
String []allParts = theString.split("\\s+");
Вы получите желаемый результат.
Некоторые очень полезные ссылки:
Надеюсь, это поможет вам лучше всего !!!
Почему + в конце?