如何用StringTokenizer检测一行中两个连续的分隔符并填充空白值



我正在逐行读取。dat文件,我想使用分隔符("t")分隔字段,因为每个字段都由制表符分隔。

然而,有一些非必需的字段,它们可以是空白的,所以如果有两个连续的制表符("t"),我想检测第二个并存储一个空白字符串。

StringTokenizer stringTokenizer = new StringTokenizer(line, "t");
ArrayList<String> al = new ArrayList<>();
while (stringTokenizer.hasMoreTokens()) {
al.add(stringTokenizer.nextToken());
}
System.out.println(al.size() + " >> " + al);

当我尝试上述操作时,我有以下输入行:

R   900081458   22222-22-2          1   -1  1   0   0   1
R   245047685   7250-46-6           0   -1  0   0   0   0
R   245048731   13755-29-8      237-340-6   0   -1  0   0   0   0
R   245047201   1080-12-2       214-096-9   0   -1  0   0   0   0
R   1   118725-24-9 612-118-00-5    405-080-4   0   0   0   0   0   0

我不能处理两个连续的制表符,所以我有以下输出:

9 >> [R, 900081458, 22222-22-2, 1, -1, 1, 0, 0, 1]
9 >> [R, 245047685, 7250-46-6, 0, -1, 0, 0, 0, 0]
10 >> [R, 245048731, 13755-29-8, 237-340-6, 0, -1, 0, 0, 0, 0]
10 >> [R, 245047201, 1080-12-2, 214-096-9, 0, -1, 0, 0, 0, 0]
11 >> [R, 1, 118725-24-9, 612-118-00-5, 405-080-4, 0, 0, 0, 0, 0, 0]

期望的输出是这样的(如果我用"BLANK"填充两个连续的空白):

11 >> [R, 900081458, 22222-22-2, "BLANK", "BLANK", 1, -1, 1, 0, 0, 1]
11 >> [R, 245047685, 7250-46-6, "BLANK", "BLANK", 0, -1, 0, 0, 0, 0]
11 >> [R, 245048731, 13755-29-8, 237-340-6, "BLANK", 0, -1, 0, 0, 0, 0]
11 >> [R, 245047201, 1080-12-2, 214-096-9, "BLANK", 0, -1, 0, 0, 0, 0]
11 >> [R, 1, 118725-24-9, 612-118-00-5, 405-080-4, 0, 0, 0, 0, 0, 0]

StringTokenizer对于空格不是很好,请使用String.split()代替。试试这个:

String[] strings = line.split("t");
ArrayList<String> al = new ArrayList<>();
for (String string : strings) {
al.add(string );
}
System.out.println(al.size() + " >> " + al);

根据k314159 -使用opencsv更聪明。

最新更新