为什么 String.split 需要转义管道定界符?

新手上路,请多包涵

我正在尝试解析一个文件,该文件的每一行都带有管道分隔值。当我没有在 split 方法中转义管道定界符时它无法正常工作,但在我如下转义管道后它可以正常工作。

 private ArrayList<String> parseLine(String line) {
    ArrayList<String> list = new ArrayList<String>();
    String[] list_str = line.split("\\|"); // note the escape "\\" here
    System.out.println(list_str.length);
    System.out.println(line);
    for(String s:list_str) {
        list.add(s);
        System.out.print(s+ "|");
    }
    return list;
}

有人可以解释为什么需要为 split() 方法转义管道字符吗?

原文由 starthis 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 497
2 个回答

String.split 需要一个正则表达式参数。未转义的 | 被解析为正则表达式,意思是“空字符串或空字符串”,这不是你的意思。

原文由 Louis Wasserman 发布,翻译遵循 CC BY-SA 3.0 许可协议

因为要 拆分 的参数的语法是正则表达式,其中 '|' 具有 OR 的特殊含义,而 '\|' 表示文字 '|' 字符串 "\\|" 表示正则表达式 '\|' 表示完全匹配字符 '|'

原文由 dlamblin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题