是否有一种简单的方法可以在文件导入期间保留java中的尾随选项卡?

是否有一种简单的方法可以在文件导入期间保留java中的尾随选项卡?,java,whitespace,bufferedreader,preserve,Java,Whitespace,Bufferedreader,Preserve,BufferedReader和Scanner的nextLine()删除了所有尾随的空格,这似乎帮助太多了。我需要保留列,目前允许这些列为空值,但在使用next()或getBytes()标识制表符遍历每一行时要犹豫,因为可能有数百万行和数百列 除了这两种方法之外,还有没有其他方法是我读台词时所缺少的呢? 在这些方法中是否设置了标志或任何其他选项来保留空白? 我是否只是强制用户使用非空字段? 我不是唯一一个试图保留空白的人,是吗 当它从文件中读取时,我有一个问题。我有这个密码 import java

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
5
4
6
我不认为这是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);
输出是

4
0
3
5
4
6

BufferedReader.readLine()
确实保留了空白。

编辑:听起来您的问题与
拆分有关,而不是
BufferedReader
扫描仪
。你可以很容易地从方程中取出来:

public class Test {
    public static void main(String[] args) {
        String line = "\t\t\t";
        System.out.println(line.split("\t").length); // Prints 0
    }
}
在分隔符上拆分字符串有多种不同的方法-您可能希望在中查看该类:

输出:

a<tab>b<tab>
c<tab>d<tab>
(输出相同。)


因此,无论是什么在剥离您的空白,它都不是
Scanner.nextLine()
BufferedReader.readLine()

当它从文件中读取时,我对它有问题。我有这个代码
importjava.lang.*;导入java.util.*;导入java.io.*;公共类stringTest{public static void main(String[]args)抛出IOException{BufferedReader br=new BufferedReader(new FileReader(“wtf.txt”);String l=br.readLine();而(l!=null){System.out.println(l.split(“\t”).length);l=br.readLine();}}
wtf.txt包含
h\tu\tr\tf o\tm\tg\t\t
,输出为4 3如果在所有制表符的任何位置添加一行,则返回零。@brwnj:这与readLine无关,与split有关。编辑…你是对的。它与split一起使用,因为如果在末尾有一个换行符,或者如果选项卡之间有任何值,它的行为会有所不同。我将使用你上面建议的拆分器。谢谢
import java.io.*;
import java.util.*;

public class Test {
    public static void main(String[] args) throws IOException {
        // Not closing anything just for convenience
        String text = "a\tb\t\r\nc\td\t";
        Scanner scanner = new Scanner(new StringReader(text));

        while (scanner.hasNextLine())
        {
            String line = scanner.nextLine();
            System.out.println(line.replace("\t", "<tab>"));
        }
    }
}