如何使用空白换行分割字符串

3

我的文件中包含以下字符串:

a

b

c

现在我想读取它并用空行分割它,所以我有这个:
text.split("\n\n"); where text is output of file

问题是这个方法不起作用。当我把换行符转换成字节时,我看到“\n\n”表示为10 10,但我的文件中的换行符是由10 13 10 13表示的。那么我该如何拆分我的文件呢?


你能发布一下你需要的输出吗?还是你只是想将输入复制到输出中? - Rivasa
8个回答

7
Escape  Description            ASCII-Value
\n      New Line Feed (LF)     10
\r      Carriage Return (CR)   13

所以在你的情况下,你需要尝试使用 string.split("\n\r")

编辑

如果你想按空行分割,请尝试使用\n\r\n\r。或者你可以使用.readLine()读取文件,并跳过所有空行。

你确定是10 13 10 13吗?它应该总是13 10...

而且,你不应该过于依赖line.separator。因为如果你正在处理来自*nix平台的一些文件,它是\n,反之亦然。即使在Windows上,一些编辑器也使用\n作为换行符。所以我建议你使用一些高级方法或使用string.replaceAll("\r\n", "\n")来规范化你的输入。


我认为他遗漏了前导的0x13。Windows行尾是回车加换行符(\r\n)。除非有人在开玩笑并且使用\n\r来分隔行,就像Acorn BBC(http://en.wikipedia.org/wiki/BBC_Micro)一样。 - Strelok
如何独立于操作系统获取 '\r\n'?System.getProperty("line.separator") 只会给我 \n。 - hudi
@hudi 你不应该过度依赖于 line.separator。因为如果你处理来自*nix的文件,它是\n,反之亦然。即使在Windows上,一些编辑器也使用\n作为换行符。 - xiaowl
您是正确的,是13 10,我的错。 - hudi
我不得不在js中这样做。当其他方法都无效时,\n\r\n\r对我很有帮助。 - perustaja

2
记住,有时候你需要使用:
System.getProperty("line.separator");

如果要使换行符与平台无关,可以使用BufferedWriter的newLine()方法,它会自动处理。


当我将System.getProperty("line.separator");转换为字节时,只返回13,所以我无法通过NEWLINE + NEWLINE进行拆分。 - hudi
那个方法返回的结果因操作系统而异 - 这就是重点... 请查看http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html - hovanessyan

1

尝试使用:

text.split("\n\r");

0

为什么要在\n\n处分割?

你应该在\r\n处分割,因为这是文件行的分隔符。


好的,我该如何独立于操作系统拆分此文件?System.getProperty("line.separator") 只会给我 \n。 - hudi

0

尝试使用正则表达式,类似于:

text.split("\\W+");

text.split("\\s+");

"a b c\r\n\r\nd".split("\\s+") 返回 ["a", "b", "c", "d"],但它不符合 OP 的要求。 - xiaowl

0
LF: Line Feed, U+000A
CR: Carriage Return, U+000D

so you need to try to use  
"string".split("\r\n");

0
使用scanner对象,而不必担心字符/字节。

-1
一种解决方法是使用"\n"进行分割,忽略空字符串。
List<String> lines = text.split("\n");

for(String line : lines) {
  line = line.trim();
  if(line != "") {
      System.out.println(line);
  }
}

它告诉我split返回String[]。为什么你要使用!=来比较字符串? - parsecer

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