我正在做一个简单的代码
String splitString = "122$23$56$rt";
for(int i=0;i<splitString.split("$").length;i++){
System.out.println("I GOT IS :: "+splitString.split("$")[i]);
}
当我像
一样分裂时splitString.split("$")
它给了我输出[122$23$56$rt]
为什么这不是'$'的夹板?
答案 0 :(得分:20)
String.split()
将正则表达式作为参数,$
是Java regex API
中的元字符。因此,你需要逃避它:
String splitString = "122$23$56$rt";
for(int i=0;i<splitString.split("\\$").length;i++){
System.out.println("I GOT IS :: "+splitString.split("\\$")[i]);
}
Java regex API
支持的其他元字符为:<([{\^-=!|]})?*+.>
答案 1 :(得分:14)
split(Pattern.quote("$"))
是我的最爱。
请参阅Pattern#quote
:
返回指定String的文字模式String。
您的代码不起作用,因为$
在正则表达式中具有特殊含义,并且由于String#split
将 regex 作为参数,$
是不被解释为字符串"$"
,而是被解释为特殊meta character $
。
答案 2 :(得分:8)
逃避它。 split()
方法采用正则表达式:split("\\$")
答案 3 :(得分:4)
尝试这样的事情
String splitString = "122$23$56$rt";
for(int i=0;i<splitString.split("\\$").length;i++){
System.out.println("I GOT IS :: "+splitString.split("$")[i]);
}
注意:split()
使用正则表达式。
您的正则表达式使用特殊字符$
$
是“行尾”的正则表达式。
答案 4 :(得分:2)
String splitString = "122$23$56$rt";
for(int i=0;i<splitString.length;i++){
System.out.println("Now you GOT this :: "+split(Pattern.quote("$")));
}
有12个特殊含义的字符:反斜杠\,插入符号^,美元符号$,句点或点。,竖线或竖线符号|,问号?,星号或星号*,加号+,左括号(,右括号)和左方括号[,开口大括号{,这些特殊字符通常称为“元字符”。
所以你的$
也是metacharacter
因为定义所以你不能使用简单的功能进行分割。虽然在这种情况下您必须使用pattern
。
谢谢..
答案 5 :(得分:1)
逃脱它
split("\\$")
而不是拆分(“$”)
答案 6 :(得分:0)
String.split()
,.match()
,.replaceAll()
是使用RegEx模式的一些方法,因此您应该查看Pattern class的javadoc:
如果您的分裂字符恰好是其中一个模式字符,则必须使用\\
将其转义,在这种情况下,您的分割调用应为:.split("\\$")
答案 7 :(得分:0)
它不起作用,因为split()将输入作为RegEx
String splitString = "122$23$56$rt";
for(int i=0;i<splitString.split("\\$").length;i++){
System.out.println("I GOT IS :: "+splitString.split("\\$")[i]);
}