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

如何在Java中拆分“~| ~”分隔符上的字符串?

  •  0
  • Vijay_Shinde  · 技术社区  · 5 年前

    例如: 当我用Java中的“~\\\\\”来拆分它时,它工作得很好。

    String sa[] = s.split("~\\|~", -1);
    for(String str : sa) {
        System.out.println(str);
    }
    

    我得到下面的输出。

    1
    Vijay
    25
    Pune
    

    当我通过传递命令行参数(“~\\\\\\;~”)运行同一个程序时。它没有正确解析字符串并在下面给出输出。

    1
    |
    Vijay
    |
    25
    |
    Pune
    

    0 回复  |  直到 5 年前
        1
  •  5
  •   Luis Colorado    5 年前

    从命令行运行时只需要一个反斜杠。在Java中生成正则表达式时需要两个反斜杠的原因是,反斜杠用于转义字符串文字中的下一个字符或启动转义序列,因此需要一个反斜杠来转义下一个字符,以便对其进行字面解释。

    ~\|~
    
        2
  •  3
  •   Luis Colorado    5 年前

    System.out.println("[" + args[i] + "]"); 要查看java从命令行接收的内容,请参见 \ 字符是shell的专用字符,aso是 | ~ chars(最后一个扩展到您的主目录,这可能是一个问题)

    您需要通过:

    java foo_bar '~\|~'
    

    (Java仍然需要 单人间 \ 这一次是为了避开竖线,因为您不是在为java编译器编写字符串文字,而是一个简单的字符串,表示上述字符串文字的内部表示形式 \ 字符不需要转义,因为它位于单引号内,所以直接传递给java程序)任何引号(单引号或双引号)都足以避免 ~ 膨胀

    如果你路过

    java foo_bar '~\\|~'
    

    \ String 字面意义的:

    String sa[] = s.split("~\\\\|~", -1); /* to escapes mean a literal escape */
    

    (请注意,现在竖条没有特殊意义)

    一分为二 ~\ 序列,这是一个 ~ 后面跟一个反斜杠,或者只跟一个 ~ ,因为没有 ~ s后跟反斜杠,使用第二个选项。你应该得到:

    1
    |
    Vijay
    |
    25
    |
    Pune
    

    这是您发布的输出。

        3
  •  1
  •   Silviu Burcea Abayomi Israel    5 年前

    public static void main(String[] args) {
        Pattern p = Pattern.compile(args[0], Pattern.LITERAL);
        final String[] result = p.split("1~|~Vijay~|~25~|~Pune");
        Arrays.stream(result).forEach(System.out::println);
    }
    

    运行:

    javac Main.java
    java Main "~|~"
    

    输出:

    1
    Vijay
    25
    Pune
    

    哪里 args[0] ~|~ Pattern.LITERAL ,它处理每个角色,包括 | ,作为正常字符,忽略其元含义。