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

45

我想要分割一个类似这样内容的字符串:

a$b$c

但是当我使用:

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

它无法识别 $ 并且不会分割字符串,但当我将 $ 替换为某个字母(如 X)时,它可以工作。 有人有任何想法吗?

6个回答

107
split函数需要传入一个正则表达式,而不是字符串来进行匹配。你的正则表达式使用了特殊字符‘$’,因此你需要对它进行转义处理:

split函数需要传入一个正则表达式,而不是字符串来进行匹配。你的正则表达式使用了特殊字符‘$’,因此你需要对它进行转义处理:

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

需要注意的是,split方法返回一个字符串数组。由于字符串是不可变的,所以它们无法被修改。对字符串所做的任何修改都会在新的字符串中返回,并且原始字符串不会被更改。因此,上述代码lineData = line.split("\\$");


4
String.split()方法中的正则表达式参数在技术上是一个字符串类型的对象,但该方法期望它以正则表达式的格式出现。 - David
是的,那是正确的 - 如果我没有表达清楚或者在陈述中有些混淆,那么请原谅。 - aperkins
10
Split 方法返回的是一个字符串数组 String[],而不是一个字符串 String。 - ColinD
1
@ColinD - 你是正确的。自我打脸程序已经启动。 - aperkins
为什么只有$符号不被识别,我们为什么需要在它前面加上反斜杠? - Garima Tiwari
1
由于 String.split(String param) 中的“param”需要是正则表达式。 - RRTW

15

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

美元符号在正则表达式中是一个特殊的运算符,因此你必须以这种方式转义它才能得到你想要的结果:

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

或者,如果分隔符可能会改变,你可以更加通用地写成这样:

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

3

split()使用正则表达式作为参数。您需要调用split("\\$"),因为$是表示“行末”的正则表达式。


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

来源:

String - Java API

Pattern - Java API


不要忘记转义 \ ,所以要这样写:("\$") - Tim
@Tim - 是的,那就是我写的...只是它只显示了一个反斜杠。我对SO及其编辑器还不太熟悉。 - David

3

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


-1

你可能遇到了非断空格的Unicode字符问题。尝试...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接