簡體   English   中英

按空格分割字符串會刪除換行符

[英]Split string by whitespaces removes new line characters

我正在用空格分割字符串,但由於某種原因,新行字符被刪除。 例如:

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"]

我已經嘗試了很多沒有運氣的事情......任何幫助都將受到贊賞。

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

這個版本應該工作,所以空白空間將只刪除而不是新行。

按空格和制表符分割(不帶換行符):

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

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

在正則表達式中, \\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視為將從結果中刪除的分隔符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM