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