我的文件包含这个字符串:
a
b
c
现在我想阅读它并用空行拆分它,所以我有这个:
text.split("\n\n"); where text is output of file
问题是这不起作用。当我将新行转换为字节时,我看到“\n\n”表示为 10 10,但文件中的新行表示为 10 13 10 13。那么如何拆分文件?
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")
来规范化你的输入。
请记住,有时您必须使用:
System.getProperty("line.separator");
获取行分隔符,如果你想让它独立于平台。您还可以使用BufferedWriter 的newLine() 方法,它会自动处理该问题。
尝试使用:
text.split("\n\r");
你为什么要分手\n\n
?
您应该拆分,\r\n
因为这就是文件行的分隔符。
尝试使用正则表达式,例如:
text.split("\\W+");
text.split("\\s+");
LF: Line Feed, U+000A
CR: Carriage Return, U+000D
so you need to try to use
"string".split("\r\n");
使用扫描器对象,而不是担心字符/字节。
一种解决方案是使用“\n”进行拆分并忽略空字符串
List<String> lines = text.split("\n");
for(String line : lines) {
line = line.trim();
if(line != "") {
System.out.println(line);
}
}