BufferedReaderとScannerのnextLine()は、末尾の空白をすべて削除することで、少し助けすぎているようです。現時点では空の値として許可されている列を保持する必要がありますが、数百の列を持つ数百万の行が存在する可能性があるため、タブ文字を識別するnext()またはgetBytes()を使用して各行をループすることを躊躇します。
行を読むために私が見逃しているこれらの2つの方法に代わるものはありますか?空白を保持するためにこれらのメソッドに設定するフラグまたはその他のオプションはありますか?空白のないフィールドを使用するようにユーザーに強制するだけですか?空白を保持しようとしているのは私だけではありませんか?
ファイルからの読み取り時に問題が発生します。私はこのコードを持っています
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
コードを使用する場合、分割の問題ではないと思います
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