在这个Java扫描器示例中,正确的分隔符是什么?

在这个Java扫描器示例中,正确的分隔符是什么?,java,java.util.scanner,Java,Java.util.scanner,我有一个文件,每行末尾都有逗号分隔的浮点数和CR LF。对于测试,我使用一个短字符串,如下所示: Scanner s = new Scanner("0.1,0.2,0.3,\r\n0.4,0.5,0.6"); s.useDelimiter(",|,\\r\\n"); while(s.hasNext()) System.out.println(s.next()); 什么是正确的分隔符,可以精确生成6个数字标记?上面显示的一个生成7个令牌,包括一个空令牌

我有一个文件,每行末尾都有逗号分隔的浮点数和CR LF。对于测试,我使用一个短字符串,如下所示:

    Scanner s = new Scanner("0.1,0.2,0.3,\r\n0.4,0.5,0.6");

    s.useDelimiter(",|,\\r\\n");

    while(s.hasNext())
        System.out.println(s.next());
什么是正确的分隔符,可以精确生成6个数字标记?上面显示的一个生成7个令牌,包括一个空令牌:

    0.1
    0.2
    0.3

    0.4
    0.5
    0.6

,|,\\r\\n
表示选项1是
。如果不匹配,请尝试
,\\r\\n
。这意味着第二个选项永远不会匹配,因为如果匹配以逗号开头,则选项1将已经匹配了它


请尝试
,\\r\\n |,
,首先尝试匹配包含多个逗号的序列
,\\r\\n
。如果不匹配,则尝试只匹配逗号

最简单的解决方案可能是
,\\s*“
。这将把逗号(后跟任意数量的空白字符)视为分隔符。由于
\\r
\\n
是空白字符,因此它对您的输入非常有效,您不必担心
|
的顺序问题。在看到
后,扫描仪将使用它找到的所有空白字符


这意味着该模式还将匹配一些原始模式没有匹配的内容,例如多个连续换行符、空格、制表符等。实际上,这可能是您想要的。如果没有,那么您可以使用Moishe的答案或与
,(\\r\\n)?“
匹配的
,然后使用一个
“\\r\\n”
序列,如果接下来是。

,|,\\r\\n
意味着将始终首先尝试逗号。请尝试使用
,\\r\\n |,
从技术上讲,此代码生成6个令牌,其中一个
\r\n0.4
@defaultlocale您是对的。第四个令牌的EOL已被粘住。如果您不在Windows上,则希望换行符为
\r\n
。更好的分隔符应该是“
”,[\r\n]*”
Agree。您的解决方案更通用、更优雅。