代码之家  ›  专栏  ›  技术社区  ›  Razvi

Java扫描器问题

  •  10
  • Razvi  · 技术社区  · 16 年前

    如何将扫描仪的分隔符设置为:;还是新线?

    Scanner.useDelimiter(Pattern.compile("(\n)|;")); 但它不起作用。

    3 回复  |  直到 12 年前
        1
  •  16
  •   Naman    9 年前

    一般来说,在模式中,您需要将 \ .

    所以,试试看

    Scanner.useDelimiter(Pattern.compile("(\\n)|;"));`
    

    Scanner.useDelimiter(Pattern.compile("[\\n;]"));`
    

    编辑 :如果 \r\n 如果出现问题,您可能希望尝试以下方法:

    Scanner.useDelimiter(Pattern.compile("[\\r\\n;]+"));
    

    \r , \n ,及 ; .

    例如我还没试过这些。

        2
  •  9
  •   Alan Moore Chris Ballance    16 年前

    正如您所发现的,您需要寻找DOS/网络风格 \r\n (CRLF)行分隔符,而不是Unix样式 \n

    你应该养成寻找这两种分隔符的习惯,以及旧的Mac风格 \r

    \r?\n|\r
    

    将其插入示例代码,您将得到:

    scanner.useDelimiter(";|\r?\n|\r");
    

    这是假设您希望一次只匹配一个换行符或分号。如果你想配一个 或更多 您可以这样做:

    scanner.useDelimiter("[;\r\n]+");
    

    也请注意,我是如何通过正则表达式的

        3
  •  1
  •   Joshua McKinnon    16 年前

    查看OP的评论,问题似乎出在另一行结尾(\r\n或CRLF)。

    下面是我的答案,它可以处理任意格式的多个分号和行尾(可能需要也可能不需要)

    Scanner.useDelimiter(Pattern.compile("([\n;]|(\r\n))+"));
    

    e、 g.一个如下所示的输入文件:

    1
    
    
    2;3;;4
    5
    

    我尝试了normal\n和\\n-这两种方法在我的情况下都有效,但我同意如果您需要一个普通的反斜杠,您会希望它加倍,因为它是一个转义字符。恰好在这种情况下,“\n”成为所需的字符,有或没有额外的“\”