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

拆分/标记化/扫描知道引号的字符串

  •  3
  • sinuhepop  · 技术社区  · 14 年前

    在Java中是否有一个用于分割字符串的默认/容易的方法,但是要注意引号或其他符号吗?

    例如,给定此文本:

    There's "a man" that live next door 'in my neighborhood', "and he gets me down..."
    

    获得:

    There's
    a man
    that
    live
    next
    door
    in my neighborhood
    and he gets me down
    
    2 回复  |  直到 14 年前
        1
  •  5
  •   polygenelubricants    14 年前

    类似这样的东西适用于您的输入:

        String text = "There's \"a man\" that live next door "
            + "'in my neighborhood', \"and he gets me down...\"";
    
        Scanner sc = new Scanner(text);
        Pattern pattern = Pattern.compile(
            "\"[^\"]*\"" +
            "|'[^']*'" +
            "|[A-Za-z']+"
        );
        String token;
        while ((token = sc.findInLine(pattern)) != null) {
            System.out.println("[" + token + "]");
        }
    

    上面的照片( as seen on ideone.com ):

    [There's]
    ["a man"]
    [that]
    [live]
    [next]
    [door]
    ['in my neighborhood']
    ["and he gets me down..."]
    

    它使用 Scanner.findInLine ,其中regex模式是:

    "[^"]*"      # double quoted token
    '[^']*'      # single quoted token
    [A-Za-z']+   # everything else
    

    毫无疑问,这并不总是100%有效;报价可以嵌套等情况将是棘手的。

    工具书类

        2
  •  1
  •   Jason McCreary    14 年前

    根据你的逻辑,你会怀疑撇号和单引号之间的区别,也就是说。 There's in my neighborhood

    如果你想要以上的东西,你就必须开发出某种配对逻辑。我在想正则表达式。或者两部分解析。