Java split无法与^一起正常使用

java split does not work correctly with ^

我想为字符^拆分字符串,但是它不起作用。我有以下代码:

1
2
3
4
String numberBase10 ="3.52*10^2";
String[] vector = numberBase10.split("^");
System.out.println("numberBase10:" + numberBase10);
System.out.println("Vector[0]:" vector[0]);

我得到以下输出:

1
2
numberBase10: 3.52*10^2
Vector[0]: 3.52*10^2

如果我尝试访问vector [1],则会收到错误IndexOutOfArray。

我必须放置任何转义字符,以便拆分可以与^一起使用?

谢谢


split采用正则表达式。 ^是用于匹配正则表达式中字符串开头的锚点,因此需要进行转义

1
String[] vector = numberBase10.split("\\\\^");

您需要使用\\\\^对其进行转义。

^本身是一个特殊字符,表示取反(在一个组中,例如[^ abc],它与abc以外的任何其他字符都匹配)或行首的锚点。


java字符串拆分方法在正则表达式上运行,并且\\'^ \\'是正则表达式中的锚字符,因此必须对其进行转义以将其视为常规字符:

1
String[] vector = numberBase10.split("\\\\^");

由于split()方法需要一个正则表达式,因此,如果您想在一个精确的字符串上拆分而不必担心它可能包含的任何正则表达式特殊字符,则应首先使用

对其进行转义

String regex = java.util.regex.Pattern.quote("^");

然后在regex上拆分。整个概念可以用一种很好的静态方法打包:

1
2
3
4
public static String[] splitRaw(String input, String separator) {
    String regex = java.util.regex.Pattern.quote(separator);
    return input.split(regex);
}

^是作为正则表达式的特殊字符,您需要对其进行转义-如果更改为

1
String[] vector = numberBase10.split("\\\\^");

然后我得到

1
Vector[0]: 3.52*10

没有其他代码更改。