10

所以我在我的一个程序中写了一小段代码,它使用 split 方法来解析和排序字符串中的各个组件。以下是代码示例:

String[] sArray;

String delimiter = "*";

String test = "TEXT*TEXT*TEXT*";
String a = "";
String b = "";
String c = "";

sArray= test.split(delimiter);

a = sArray[0];
b = sArray[1];
c = sArray[2];

System.out.println("A is: " + a + "\nB is: " + b + "\nC is: " + c);

但是,当我运行这个程序时,它返回一个错误,指出:

Dangling meta character '*' near index 0

所以我用谷歌搜索了这个错误,发现它可能与如何*在正则表达式中被视为通配符的问题有关。所以我尝试了:

String delimiter = "\*"

但这只是返回了另一个错误,说明:

illegal escape character

有没有人遇到过这个问题,或者知道你(如果你是)应该如何*在 Java 中逃脱?

4

3 回答 3

25

您还必须转义反斜杠:

String delimiter = "\\*";

因为字符串文字"\\"只是一个反斜杠,所以字符串文字"\\*"表示转义的星号。

于 2013-01-07T22:51:25.947 回答
5

理解解决方案的方法是意识到这里有两种“语言”在起作用。您拥有正则表达式语言(Java 风格),其中*是一个元字符,需要用 a 转义\以表示文字*。那给你

''\*''    // not Java yet ...

但是您试图用 Java 字符串文字的“语言”来表示该字符串,其中 a\是转义字符。所以这要求任何文字\(无论我们试图表示什么)都必须被转义。这给你

"\\*"     // now Java ...

如果您始终如一地应用这种方法/思考-“首先进行正则表达式转义,然后进行字符串文字转义”-您将不会感到困惑。

于 2013-01-07T23:03:22.750 回答
-1

您必须在“*”之前附加“\”,就好像您想在 java 中表示“\”一样,您必须在它之前再使用一个“\”。

所以,“\”代表:----->“\”所以如果你想使用“ ”作为分隔符,使用“\

更正的代码:

String delimiter = "\\*";
String test = "TEXT*TEXT*TEXT*";
String a = "";
String b = "";
String c = "";
sArray= test.split(delimiter);
a = sArray[0];
b = sArray[1];
c = sArray[2];
System.out.println("A is: " + a + "\nB is: " + b + "\nC is: " + c);

输出:

A 是:文本

B 是:文本

C 是:文本

于 2015-06-19T17:21:24.413 回答