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

Thi*_*mer 10 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);
Run Code Online (Sandbox Code Playgroud)

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

Dangling meta character '*' near index 0

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

String delimiter = "\*"

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

illegal escape character

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

jlo*_*rdo 25

你还必须逃避反斜杠:

String delimiter = "\\*";
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*n C 5

理解解决方案的方法是认识到这里有两种"语言".你有正则表达式的语言(Java风格),其中*是一个元字符,需要转义为a \来表示文字*.那给了你

''\*''    // not Java yet ...
Run Code Online (Sandbox Code Playgroud)

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

"\\*"     // now Java ...
Run Code Online (Sandbox Code Playgroud)

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