将Scanner与自定义分隔符一起使用会跳过尾随空标记

时间:2014-09-05 11:40:22

标签: java java.util.scanner

我有一个简单的扫描仪,如下所示。

Scanner sc = new Scanner(new FileInputStream("...<CSV file>"));
sc.useDelimiter(",");

我发现上面的扫描仪会跳过尾随的空标记。

我是否有办法使用扫描仪获得空的尾随令牌?

类似String.split(pattern, -1)如何包含空尾tokens

1 个答案:

答案 0 :(得分:1)

可以使用扫描程序获取超出最后分隔符的最终空标记,但需要一些特殊处理:

  1. 构造一个正则表达式,以匹配分隔符前面的零宽度位置。您将需要使用零宽度正向前瞻构造(?=X)。此String或Pattern将是Scanner :: useDelimiter的参数。对于在一行上使用逗号分隔值的简单情况,可以是useDelimiter("(?=,)")

  2. 在处理循环中,您需要从除第一个标记之外的每个标记的前面剥离实际分隔符。见下文。

  3. 如果第一个标记以分隔符开头,则表示扫描程序在输入开始时跳过一个空标记的特殊情况。听起来有点熟?如果您在输入开始时担心空标记,则可能需要处理此特殊情况。

  4. 最后,您可以将这三个修改组合到一个包装类中,该类提供与原始扫描器类似的功能。