按空格分割字符串会删除换行符

3
我正在通过空格来分割字符串,但不知何故换行符被删除了。例如:
String[] splitSentence = "Example sentence\n\n This sentence is an example".
   split("\\s+");

splitSentence将包含以下内容:

["Example", "sentence", "This", "sentence", "is", "an", "example"]

如果我这样做:

String[] splitSentence = "Example sentence\n\n This sentence is an example".
   split("\\s");

splitSentence将包含以下内容:

["Example", "sentence", "", "", "This", "sentence", "is", "an", "example"]

我正在尝试实现类似这样的功能:
["Example", "sentence\n\n", "This", "sentence", "is", "an", "example"]  

或者像这样:
["Example", "sentence", "\n", "\n", "This", "sentence", "is", "an", "example"]

我尝试过很多方法,但都没有成功...非常感谢您的帮助。


4
\n 也是空白字符。 - Andrew_CS
just change "\s+" to " +" - morgano
1
如果你想从\s中排除换行符,则使用反向的反向并添加\n,像这样[^\S\n] - HamZa
3个回答

2
String[] splitSentence = "Example sentence\n\n This sentence is an example".
   split(' ');

这个版本应该可以工作,所以只会移除空格而不是换行符。


1

按空格和制表符分割(不包括换行):

String[] splitSentence = "Example sentence\n\n This sentence is an example".split("[ \t]+");

结果:["Example", "sentence\n\n", "This", "sentence", "is", "an", "example"]


1
在正则表达式中,\s被定义为与此集合中的字符等效:
[ \t\n\x0B\f\r]

(请参见javadoc)。如果您不希望换行符被视为空格,则可以编写自己的设置:

splitSentence = "Example sentence\n\n This sentence is an example".split("[ \t\\x0B\f\r]+");

(或删除其他您不希望 split 识别的字符。)
\t 是 TAB,\x0B 是垂直制表符,\f 是 FF (换页),\r 是 CR) 编辑: 这种方法似乎会生成您提到的第二个结果,其中 \n 作为单独的字符串返回:
splitSentence = "Example sentence\n\n This sentence is an example".split("[ \t\\x0B\f\r]+|(?=\n)");

这里使用预测先行来在紧接着的\n处分割,但不将\n视为会从结果中移除的分隔符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接