我想拆分一个包含这样内容的字符串:
a$b$c
但是当我使用时:
String data=...
data.split("$");
它无法识别$并且不会拆分字符串,但是当我将某些字母替换为X时,它会起作用。 有没有人有任何想法?
答案 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