3

我的文件包含这个字符串:

a

b

c

现在我想阅读它并用空行拆分它,所以我有这个:

text.split("\n\n"); where text is output of file

问题是这不起作用。当我将新行转换为字节时,我看到“\n\n”表示为 10 10,但文件中的新行表示为 10 13 10 13。那么如何拆分文件?

4

8 回答 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")来规范化你的输入。

于 2012-07-30T08:23:32.157 回答
2

请记住,有时您必须使用:

System.getProperty("line.separator");

获取行分隔符,如果你想让它独立于平台。您还可以使用BufferedWriter 的newLine() 方法,它会自动处理该问题。

于 2012-07-30T08:27:07.183 回答
1

尝试使用:

text.split("\n\r");
于 2012-07-30T08:22:02.157 回答
0

你为什么要分手\n\n

您应该拆分,\r\n因为这就是文件行的分隔符。

于 2012-07-30T08:22:28.713 回答
0

尝试使用正则表达式,例如:

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

text.split("\\s+");
于 2012-07-30T08:24:41.143 回答
0
LF: Line Feed, U+000A
CR: Carriage Return, U+000D

so you need to try to use  
"string".split("\r\n");
于 2012-07-30T08:32:55.367 回答
0

使用扫描器对象,而不是担心字符/字节。

于 2012-07-30T08:34:31.853 回答
-1

一种解决方案是使用“\n”进行拆分并忽略空字符串

List<String> lines = text.split("\n");

for(String line : lines) {
  line = line.trim();
  if(line != "") {
      System.out.println(line);
  }
}
于 2012-07-30T08:24:28.857 回答