Java 何时需要将管道放入foo.split()中的方括号(匹配项)

Java 何时需要将管道放入foo.split()中的方括号(匹配项),java,regex,Java,Regex,我最近遇到了一个问题,我使用带“|”作为参数的字符串拆分。例如: String foo = "Hello|World"; System.out.println(foo.split("|")[1]); 令我惊讶的是,打印出来的结果是H。知道这是正则表达式,我用[]包围了它,它工作正常(打印出来) 我的问题是如何知道何时需要[],因为我以前在|上使用过split on,但没有[],而且效果很好。从那以后,我的java版本一直没有改变。唯一不同的是,这是一个android项目 编辑:我似乎弄错了,只

我最近遇到了一个问题,我使用带“|”作为参数的字符串拆分。例如:

String foo = "Hello|World";
System.out.println(foo.split("|")[1]);
令我惊讶的是,打印出来的结果是H。知道这是正则表达式,我用[]包围了它,它工作正常(打印出来)

我的问题是如何知道何时需要[],因为我以前在|上使用过split on,但没有[],而且效果很好。从那以后,我的java版本一直没有改变。唯一不同的是,这是一个android项目

编辑:我似乎弄错了,只是尝试了各种方法在“|”上拆分,但没有转义或将其添加到集合中,但结果总是一样的。我知道我以前在管道上进行过拆分,但似乎我必须转义或添加到集合中才能获得正确的结果。

管道(
|
)是一个保存的正则表达式符号(它允许正则表达式组件在逻辑上进行
-ed),但是如果您想在其字符上下文中使用它,您必须转义它或将它添加到集合中(用
[]
表示)

转义示例:

System.out.println(foo.split("\\|")[1]);
将管道添加到集合示例:

System.out.println(foo.split("[|]")[1]);
管道(
|
)是一个已保存的正则表达式符号(它允许正则表达式组件在逻辑上
-ed),但如果要在其字符上下文中使用它,则必须对其进行转义将其添加到集合中(用
[]
表示)

转义示例:

System.out.println(foo.split("\\|")[1]);
将管道添加到集合示例:

System.out.println(foo.split("[|]")[1]);

尝试转义管道,因为split方法将regex作为输入,并且“|”(pipe)在其中具有特殊含义,所以请像以下那样使用它:

String foo = "Hello|World";
System.out.println(foo.split("\\|")[1]);
Output:
World

尝试转义管道,因为split方法将regex作为输入,并且“|”(pipe)在其中具有特殊含义,所以请像以下那样使用它:

String foo = "Hello|World";
System.out.println(foo.split("\\|")[1]);
Output:
World
您需要一个分隔符(\)来使用像|这样的特殊字符

String foo = "Hello|World";
System.out.println(foo.split("\\|")[1]);
您需要一个分隔符(\)来使用像|这样的特殊字符

String foo = "Hello|World";
System.out.println(foo.split("\\|")[1]);

您需要转义正则表达式中具有特殊含义的每个字符。要获得所有特殊字符的列表,请查看

例如:

- 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 `\\.`

您需要转义正则表达式中具有特殊含义的每个字符。要获得所有特殊字符的列表,请查看

例如:

- 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 `\\.`

不过,单个原子字符类是一种浪费。最好走“逃避之路”我对这两种方法都很了解,我的问题很简单,因为我使用带“|”的split作为论点,没有任何问题,并且按照预期的方式工作(尽管这不是最好的方法,只是试着理解不同之处)
有没有办法知道什么时候需要它们
?如果希望
|
用作字符,而不是正则表达式符号,则必须转义。知道是否需要转义取决于您的目的。不过,单个atom字符类是一种浪费。最好走“逃避之路”我对这两种方法都很了解,我的问题很简单,因为我使用带“|”的split作为论点,没有任何问题,并且按照预期的方式工作(尽管这不是最好的方法,只是试着理解不同之处)
有没有办法知道什么时候需要它们
?如果希望
|
用作字符,而不是正则表达式符号,则必须转义。知道是否有必要逃跑取决于你的目的。