import java.util.StringTokenizer;
class MySplit
{
public static void main(String S[])
{
String settings = "12312$12121";
StringTokenizer splitedArray = new StringTokenizer(settings,"$");
String splitedArray1[] = settings.split("$");
System.out.println(splitedArray1[0]);
while(splitedArray.hasMoreElements())
System.out.println(splitedArray.nextToken().toString());
}
}
在上面的示例中,如果我使用$
拆分字符串,那么它无法正常工作,如果我正在与其他符号分割,那么它工作正常。
为什么会这样,如果它只支持正则表达式,那么为什么它适用于:
,,
,;
等符号。
答案 0 :(得分:6)
$
在正则表达式中具有特殊含义,并且由于String#split
将 regex 作为参数,$
不会被解释为字符串{{ 1}},但作为特殊meta character "$"
。一个性感的解决方案是:
$
返回指定String的文字模式String。
...另一个解决方案是通过添加settings.split(Pattern.quote("$"))
来逃避$
:
\\
重要提示:检查您是否在结果数组中确实获得了元素,这一点非常重要。
执行settings.split("\\$")
时,如果没有splitedArray1[0]
符号,则可以获得ArrayIndexOutOfBoundsException
。我想补充一下:
$
答案 1 :(得分:3)
如果您查看Java文档,您可以看到--all
方法将正则表达式作为参数,因此您必须编写正则表达式而不是简单字符。
在正则表达式split
中有一个特定的含义,所以你必须以这种方式逃脱它:
$
答案 2 :(得分:2)
美元符号$是Java正则表达式中的特殊字符。你必须逃避它,以便让它像这样工作:
settings.split("\\$");
来自String.split文档:
将此字符串拆分为给定正则表达式的匹配项。
此方法的工作方式就像通过调用双参数split方法一样 给定的表达式和一个零的限制参数。尾随空 因此,字符串不包含在结果数组中。
旁注:
查看 Pattern class ,它可以让您了解需要逃脱的所有角色。
答案 3 :(得分:2)
问题是split(String str)
方法期望str
是有效的正则表达式。您提到的字符是正则表达式语法中的特殊字符,因此执行特殊操作。
要使正则表达式引擎按字面意思理解它们,您需要像这样转义它们:
.split("\\$")
因此:
String str = "This is 1st string.$This is the second string";
for(String string : str.split("\\$"))
System.out.println(string);
你最终得到了这个:
This is 1st string.
This is the second strin
答案 4 :(得分:1)
因为$是正则表达式中使用的特殊字符,表示表达式的开头。
你应该使用转义序列\ $来转义它,如果是Java,它应该是\ $
希望有所帮助。 干杯