为什么我不能用Java在$中拆分字符串

时间:2015-07-14 08:55:55

标签: java string-split

我只是在eclipse IDE涂鸦并写下代码。

String str = new String("A$B$C$D");
String arrStr[] = str.split("$");
for (int i = 0; i < arrStr.length; i++) {
    System.out.println("Val: "+arrStr[i]);
}

我期待的输出如下: Val:A 瓦尔:B 瓦尔:C Val:D
但不是这样,我输出

Val: A$B$C$D 为什么?我在想它可能是内部对待的特殊输入,也可能是变量声明规则。

5 个答案:

答案 0 :(得分:9)

方法String.split(String regex)将正则表达式作为参数,因此$表示EOL。

如果您想按字符$拆分,可以使用

String arrStr[] = str.split(Pattern.quote("$"));

答案 1 :(得分:7)

你必须逃避“$”:

pip install wheel

答案 2 :(得分:4)

您已使用$作为正则表达式进行拆分。该字符已经在“行尾”(refer this)的正则表达式中定义。因此,您需要从实际正则表达式中转义字符,并且拆分字符应为$

因此,在代码中使用str.split("\\$")代替str.split("$")

答案 3 :(得分:3)

split()方法接受类似于正则表达式的字符串(请参阅Javadoc)。在正则表达式中,保留$字符(匹配“行尾”,请参阅Javadoc)。因此,你必须像Avinash写的那样逃避它。

String arrStr[] = str.split("\\$");

双反斜杠是为了逃避反斜杠本身。

答案 4 :(得分:1)

简单。保留“$”字符意味着您需要将其转义。

String str = new String("A$B$C$D");
String arrStr[] = str.split("\\$");
for (int i = 0; i < arrStr.length; i++) {
    System.out.println("Val: "+arrStr[i]);
}

这应该可以正常工作。所以每当这样的事情发生时,逃避角色!