2014-09-05 76 views
1

我有一个简单的扫描仪,如下所示。使用扫描仪与自定义分隔符跳过尾随空令牌

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

我注意到上面的扫描仪跳过了后面的空标记。

有没有一种方法可以使用扫描仪获得空尾标记?

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

+0

你可以添加示例文件内容和预期吗? – Tirath 2014-09-30 18:02:05

回答

1

可以用扫描仪得到最终的空令牌这超出了最后一个分隔符,但它需要一些特殊处理:

  1. 构造一个正则表达式匹配零宽度位于分隔符前面。您将需要使用零宽度正向超前构造(?=X)。这个字符串或模式将成为您的参数Scanner :: useDelimiter。对于一行中有逗号分隔值的简单情况,那将是useDelimiter("(?=,)")

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

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

最后,您可以将这三个修改组合成一个包装类,它提供了与原始扫描仪类似的功能。