你需要在Java中逃脱*角色吗?

时间:2013-01-07 22:50:23

标签: java string split escaping wildcard

所以我在我的程序中编写了一小段代码,它使用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中逃脱*的?

3 个答案:

答案 0 :(得分:24)

你还必须逃避反斜杠:

String delimiter = "\\*";

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

答案 1 :(得分:5)

理解解决方案的方法是认识到这里有两种“语言”。您具有正则表达式(Java flavor)的语言,其中*是一个元字符,需要使用\进行转义以表示文字*。这给了你

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

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

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

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

答案 2 :(得分:-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是:TEXT

     

B是:TEXT

     

C是:TEXT