BufferedReader和Scanner的nextLine()似乎过于热心,会删除所有尾随空格。我需要保留列,而目前列允许为空值,但是不想使用next()或getBytes()在每一行中循环识别制表符,因为可能有数百列和数百万行。
有没有我忽略的读取行的其他方法? 这些方法中是否有标志或其他选项可设置以保留空格? 我只需强制用户使用非空白字段吗? 我不是唯一一个试图保留空格的人吧?
当从文件中读取时,我遇到了问题。我有以下的代码:
import java.lang.*;
import java.util.*;
import java.io.*;
public class stringTest
{
public static void main (String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new FileReader("wtf.txt"));
String l = br.readLine();
while (l != null) {
System.out.println(l.split("\t").length);
l = br.readLine();
}
}
}
wtf.txt 包含的内容
h\tu\tr\tf\n
o\tm\tg\t\t\n
输出结果为
4
3
此外,如果我在任何地方添加一行全是制表符的代码,例如:
h\tu\tr\tf\n
\t\t\t\t\t\n
o\tm\tg\t\t\n
输出结果为:
4
0
3
我认为这不是split的问题,因为如果我使用以下代码:
String s = "w\tt\tf\t\t\n";
System.out.println(""+s.split("\t").length);
String s1 = "w\tt\tf\tx\n";
System.out.println(""+s1.split("\t").length);
String s2 = "\t\t\t\t\t\t\n";
System.out.println(""+s2.split("\t").length);
输出结果为:
5
4
6
h\tu\tr\tf o\tm\tg\t\t
输出结果为4 3如果我添加一个全是制表符的行,则返回零。 - brwnj