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

时间:2010-01-30 18:03:51

标签: java

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

a$b$c

但是当我使用时:

String data=...
data.split("$");

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

6 个答案:

答案 0 :(得分:95)

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

String line = ...
String[] lineData = line.split("\\$");

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

答案 1 :(得分:14)

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

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

String data = ...
String[] parts = data.split("\\$");

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

String data = ...
String[] parts = data.split(java.util.regex.Pattern.quote("$"));

答案 2 :(得分:3)

split()使用正则表达式作为参数。您必须致电split( "\\$" ),因为$是“行尾”的正则表达式。

答案 3 :(得分:3)

Java中的String.split()采用String参数,该参数是正则表达式。正则表达式中的'$'字符表示行的结尾。如果要在字符串中查找美元符号,可以使用转义序列(“\\ $”)。

来源:

String - Java API

Pattern - Java API

答案 4 :(得分:3)

$是表示行尾的正则表达式中的特殊字符。要匹配美元符号,请使用"\\$"

答案 5 :(得分:-1)

对于不间断的空格,您可能会遇到uniCode字符的问题。尝试...

String[] elements = myString.split("[\\s\\xA0]+"); //include uniCode non-breaking
相关问题