为什么我不能用美元符号拆分字符串?

JGC*_*JGC 42 java

我想拆分一个包含这样内容的字符串:

a$b$c
Run Code Online (Sandbox Code Playgroud)

但是当我使用时:

String data=...
data.split("$");
Run Code Online (Sandbox Code Playgroud)

它不会识别$并且不会拆分字符串,但是当我用某些字母替换$时,它会起作用.有没有人有任何想法?

ape*_*ins 97

split函数采用正则表达式而不是字符串来匹配.你的正则表达式使用一个特殊的字符 - 在这种情况下是'$' - 所以你需要改变它以逃避该字符:

String line = ...
String[] lineData = line.split("\\$");
Run Code Online (Sandbox Code Playgroud)

另请注意,split返回一个字符串数组 - 字符串是不可变的,因此无法修改它们.对String进行的任何修改都将以新String返回,并且不会更改原始字符串.因此lineData = line.split("\\$");以上.

  • Split返回String [],而不是String. (10认同)
  • 从技术上讲,String.split()的regex参数是String类型的对象.但该方法期望它采用正则表达式格式. (4认同)

And*_*lio 15

split方法接受String作为第一个参数,然后将其解释为正则表达式.

美元符号是正则表达式中的特定运算符,因此您必须以这种方式将其转义才能获得所需内容:

String data = ...
String[] parts = data.split("\\$");
Run Code Online (Sandbox Code Playgroud)

或者,如果分隔符可能会更改,则可以通过以下方式更加通用:

String data = ...
String[] parts = data.split(java.util.regex.Pattern.quote("$"));
Run Code Online (Sandbox Code Playgroud)