为什么split方法不支持$,*etc分隔符来拆分字符串

Vin*_*rma 4 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());            
  }
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,如果我使用分裂字符串$,那么它不能正常工作,如果我与其他符号分裂,那么它工作正常.

为什么要这样,如果它仅支持正则表达式,那么为什么它的做工精细:,,,;等符号.

Mar*_*oun 6

$在正则表达式中有一个特殊的含义,并且由于String#split正则表达式作为参数,因此$不会将其解释为字符串"$",而是作为特殊的元字符 $.一个性感的解决方案:

settings.split(Pattern.quote("$"))
Run Code Online (Sandbox Code Playgroud)

Pattern#quote:

返回指定String的文字模式String.

...另一个解决方案是逃避$,添加\\:

settings.split("\\$")
Run Code Online (Sandbox Code Playgroud)

重要说明:检查实际上是否在结果数组中有元素是非常重要的.

如果你这样做splitedArray1[0],你可以得到ArrayIndexOutOfBoundsException没有$符号.我想补充一下:

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