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