java - 为什么 split 方法不支持 $,* 等分隔符来分割字符串

标签 java regex

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());            
  }
}

在上面的示例中,如果我使用 $ 拆分字符串,则它无法正常工作,如果我使用其他符号拆分,则它可以正常工作。

为什么会这样,如果它只支持正则表达式那么为什么它可以很好地用于 :; 等符号。

最佳答案

$ 在正则表达式中有特殊含义,并且由于 String#splitregex 作为参数,$ 不会被解释为字符串 "$",而是特殊的 meta character $。一个性感的解决方案是:

settings.split(Pattern.quote("$"))

Pattern#quote :

Returns a literal pattern String for the specified String.

...另一种解决方案是通过添加 \\ 来转义 $:

settings.split("\\$")

重要说明:检查结果数组中是否确实包含元素非常重要。

当您执行 splitedArray1[0] 时,您可以获得 ArrayIndexOutOfBoundsException如果没有 $ 符号。我要补充:

if (splitedArray1.length == 0) {
    // return or do whatever you want 
    // except accessing the array
}

关于java - 为什么 split 方法不支持 $,* 等分隔符来分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29891369/

相关文章:

java - 方法没有重写或实现父类(super class)型错误的方法

java - 如何在 Go 中检查函数参数

Java:使用正则表达式查找 URL 将它们转换为 html 链接。同时检测链接是否包含http://,如果没有,追加它

java - 这种分组方法有什么问题吗? (分割字符串)

java - 为什么我在运行时使用 jre websphere 而不是正常工作的正常 jre 1.7 时会遇到此问题?

java - 如何以与平台无关的方式终止由ant exec启动的java进程?

java - 比较单元格中的 2 个值并更改 JTable 中的单元格颜色

正则表达式查找任何后跟冒号的大写单词

python - 如何使用 Python Pandas 获取字符串中的第一个和最后一个(可变)字符

python - 用 Python 解析莎士比亚文本