Какой шаблон regex нужно передать в метод java.lang.String.split()
, чтобы разделить строку на массив подстрок, используя все пробельные символы (' ', '\t', '\n' и т.д.) в качестве разделителей?
Что-то в духе
myString.split("\\s+");
Это группирует все белые пробелы в качестве разделителя.
Таким образом, если у меня есть строка:
"Hello[space][tab]World"
.
Это должно дать строки "Hello"
и "World"
и опустить пустое пространство между [space]
и [tab]
.
Как отметил VonC, обратный слеш должен быть экранирован, потому что Java сначала попытается преобразовать строку в специальный символ и отправить это на разбор. Вы хотите получить литерал "\s"
, что означает, что вам нужно передать "\\\s"
. Это может привести к некоторой путанице.
\\\s
эквивалентно [ \\\t\\\n\\x0B\f\\r]
.
В большинстве диалектов regex есть набор удобных символьных обобщений, которые можно использовать для такого рода вещей - их стоит запомнить:
\w
- соответствует любому символу слова.
\W
- Соответствует любому несловарному символу.
\s
- Идентифицирует любой символ пробела.
\S
- Идентифицирует все символы, кроме пробелов.
\d
- Ищет любую цифру.
\D
- Ищет все, кроме цифр.
Поиск по запросу "Regex Cheatsheets" должен вознаградить вас множеством полезных сводок.
Чтобы получить эту работу в JavaScript, мне пришлось сделать следующее:
myString.split(/\s+/g)
Также вы можете иметь Юникод неразрывный пробел xA0...
String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
Апач Викискладе Ланг имеет способ разделить строку с пробельные символы в качестве разделителей:
StringUtils.split("abc def")
Это может быть проще в использовании, чем regex образец.
Поскольку это регулярное выражение, и я'м предполагая, что U будет также не хочу, чтобы не алфавитно-цифровые символы, такие как запятые, точки и т. д., которые могли бы быть окружены пробелами (например, "один , два и" должны дать [один][два]), следует:
myString.split(/[\s\W]+/)
String str = "Hello World";
String res[] = str.split("\\s+");
вы можете разбить строку на строки с помощью следующей инструкции :
String textStr[] = yourString.split("\\r?\\n");
вы можете разделить строку на пробел, используя следующую инструкцию :
String textStr[] = yourString.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);
}
}
}