我的文件中包含以下字符串:
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")
来规范化你的输入。
\n\r
来分隔行,就像Acorn BBC(http://en.wikipedia.org/wiki/BBC_Micro)一样。 - Strelokline.separator
。因为如果你处理来自*nix的文件,它是\n
,反之亦然。即使在Windows上,一些编辑器也使用\n
作为换行符。 - xiaowlSystem.getProperty("line.separator");
如果要使换行符与平台无关,可以使用BufferedWriter的newLine()方法,它会自动处理。
尝试使用:
text.split("\n\r");
为什么要在\n\n
处分割?
你应该在\r\n
处分割,因为这是文件行的分隔符。
尝试使用正则表达式,类似于:
text.split("\\W+");
text.split("\\s+");
"a b c\r\n\r\nd".split("\\s+")
返回 ["a", "b", "c", "d"]
,但它不符合 OP 的要求。 - xiaowlLF: Line Feed, U+000A
CR: Carriage Return, U+000D
so you need to try to use
"string".split("\r\n");
List<String> lines = text.split("\n");
for(String line : lines) {
line = line.trim();
if(line != "") {
System.out.println(line);
}
}
split
返回String[]
。为什么你要使用!=
来比较字符串? - parsecer