奇怪的String.split("\n")行为

ama*_*urs 7 java split

我有一个.txt文本文件,包含一些行..我使用RequestBuilder对象加载包含,并使用words = String.split("\n")拆分responseText; 但我想知道,为什么结果包含"\n"部分..例如,我的文字:

abc
def
ghi
Run Code Online (Sandbox Code Playgroud)

结果是,

words[0] = "abc\n"
words[1] = "def\n"
words[2] = "ghi\n"
Run Code Online (Sandbox Code Playgroud)

任何帮助都非常感谢.提前致谢.

Boz*_*zho 19

尝试使用string.split("\\n+").甚至更好 - split("[\\r\\n]+")

  • 但那还不会跳过空行吗?(也许希望) (6认同)

mar*_*cog 10

Windows回车符("\r\n")不应该对结果产生明显的差异,也不需要转义传递给它的正则表达式String.split().

以下是上述使用的证明str.split("\n"):http://ideone.com/4PnZi

如果你确实有Windows回车,你应该(尽管严格来说没有必要)使用str.split("\r\n"):http://ideone.com/XcF3C

  • @amateurs许多Windows应用程序都将使用\ r \ n结束行,而Linux和其他应用程序将使用\ n。如果要剥离Java中的回车符(\ r),请使用str.replaceAll(“ \ r \ n”,“ \ n”)`。首先,找到一个不使用回车符的Windows应用程序,您必须问其他人。 (2认同)

tri*_*ogy 5

您可能还需要考虑 String[] lines = text.split("\\\\n");

  • 因为Java需要正则表达式为String文字。您有\ n,但\在正则表达式中也很特殊。使事情复杂化的是,您在正则表达式中的转义方式也使用\。因此,您需要再次对其进行转义以使\\ n看起来应该足够..对于正则表达式..但是Java将正则表达式模式用作字符串。它会将您视为\\ n的转义字符而仅使n。对于\\\ n,Java看到一个\\ n,而regex认为您的意思是\ n,但是\仍被视为regex中的特殊字符。因此,正则表达式\\ = \和Java \\ = \使得Java最终将\\ n保留为\ n。刚结束转义的东西,呵呵。 (2认同)