我有一个简单的扫描仪,如下所示。
Scanner sc = new Scanner(new FileInputStream("...<CSV file>"));
sc.useDelimiter(",");
我发现上面的扫描仪会跳过尾随的空标记。
我是否有办法使用扫描仪获得空的尾随令牌?
类似String.split(pattern, -1)
如何包含空尾tokens
?
答案 0 :(得分:1)
您可以使用扫描程序获取超出最后分隔符的最终空标记,但需要一些特殊处理:
构造一个正则表达式,以匹配分隔符前面的零宽度位置。您将需要使用零宽度正向前瞻构造(?=X)
。此String或Pattern将是Scanner :: useDelimiter的参数。对于在一行上使用逗号分隔值的简单情况,可以是useDelimiter("(?=,)")
。
在处理循环中,您需要从除第一个标记之外的每个标记的前面剥离实际分隔符。见下文。
如果第一个标记以分隔符开头,则表示扫描程序在输入开始时跳过一个空标记的特殊情况。听起来有点熟?如果您在输入开始时担心空标记,则可能需要处理此特殊情况。
最后,您可以将这三个修改组合到一个包装类中,该类提供与原始扫描器类似的功能。