我最近遇到了一个问题,我使用了" |"作为论点。例如:
String foo = "Hello|World";
System.out.println(foo.split("|")[1]);
令我惊讶的是打印的结果是H.知道这是正则表达式我用[]包围它并且它正常工作(打印出世界)。
我的问题是我怎么知道[]是否必要,因为我已经使用了拆分|没有[]之前,它工作正常。我的java版本自那以后没有改变。唯一的区别是这是一个Android项目。
编辑:我似乎错了,只是尝试了各种方式分裂" |"没有转义或添加到集合,但总是相同的结果。我知道我之前已拆分过管道,但似乎我必须将其转义或添加到一组以获得正确的结果。答案 0 :(得分:2)
管道(|
)是一个保存的正则表达式符号(它允许正则表达式组件在逻辑上OR
- ed),但如果要在其字符上下文中使用它,则必须转义或将其添加到集合中(用[]
表示)。
逃避示例:
System.out.println(foo.split("\\|")[1]);
将管道添加到设置示例:
System.out.println(foo.split("[|]")[1]);
答案 1 :(得分:2)
尝试转义管道,因为拆分方法将正则表达式作为输入," |"(管道)具有特殊含义,因此请使用它:
String foo = "Hello|World";
System.out.println(foo.split("\\|")[1]);
Output:
World
答案 2 :(得分:0)
你需要一个分隔符(" \")来使用像|这样的特殊字符
String foo = "Hello|World";
System.out.println(foo.split("\\|")[1]);
答案 3 :(得分:0)
你需要转义正则表达式中具有特殊含义的每个字符。要获取所有特殊字符的列表,请查看Java API for the Pattern class
例如:.
- special meaning in the regex, it matched "Any character"
- if you want to disable this special meaning you have to escape it as `\.`
- as the backslash itself has also a special meaning you need to escape it as well,
that's why the regex must be specified as `\\.`