我需要传递什么正则表达式模式到java.lang.String.split()
函数中,才能使用所有空格字符(' '
、'\t'
、'\n'
等)作为分隔符将字符串拆分为子字符串数组?
我需要传递什么正则表达式模式到java.lang.String.split()
函数中,才能使用所有空格字符(' '
、'\t'
、'\n'
等)作为分隔符将字符串拆分为子字符串数组?
大致上是这样的:
myString.split("\\s+");
"Hello[space character][tab character]World"
"Hello"
和"World"
,并省略[space]
和[tab]
之间的空格。
正如VonC所指出的那样,反斜杠应该被转义,因为Java首先会尝试将字符串转义为特殊字符,然后发送给解析器。你想要的是字面上的"\s"
,这意味着你需要传递"\\s"
。这可能会有点令人困惑。
\\s
等同于[ \\t\\n\\x0B\\f\\r]
。
在大多数正则表达式方言中,您可以使用一组方便的字符概述来实现此类操作 - 这些是值得记住的好方法:
\w
- 匹配任何单词字符。
\W
- 匹配任何非单词字符。
\s
- 匹配任何空白字符。
\S
- 匹配除空白字符外的任何内容。
\d
- 匹配任何数字。
\D
- 匹配除数字以外的任何内容。
搜索“正则表达式速查表”应该会给您带来许多有用的摘要。
要在Javascript中使其工作,我必须执行以下操作:
myString.split(/\s+/g)
\\s+\"应该可以解决问题。
"另外,您可能会遇到一个UniCode非断空格xA0...
String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");
Apache Commons Lang有一个方法可以使用空格字符作为分隔符来拆分字符串:
StringUtils.split("abc def")
这个工具可能比正则表达式更容易使用。
你所需的是使用Java正则表达式引擎中特殊字符之一来拆分字符串,其中之一就是空白字符。
[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+");
一些非常有用的链接:
希望这些能够对您最有帮助!
要使用任何Unicode空格来拆分字符串,您需要使用
s.split("(?U)\\s+")
^^^^
(?U)
内联嵌入标志选项相当于Pattern.UNICODE_CHARACTER_CLASS
,它使得\s
简写字符类可以匹配来自空格Unicode类别的任何字符。s.split("(?U)(?<=\\s)(?=\\S)|(?<=\\S)(?=\\s)")
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, , »]
String textStr[] = yourString.split("\\r?\\n");
String textStr[] = yourString.split("\\s+");
trim()
:trim().split("\\s++")
- 否则,例如在拆分a b c
时将会首先产生两个空字符串。 - Marcus Junius Brutus"\\\\s"
? - Michael Borkowski