基于逗号分隔符拆分字符串

Pra*_*nda 1 java

以下代码有什么问题?

String selectedCountriesStr = countries.replaceAll("[", "").replaceAll("]", "").trim();
String[] selectedCountriesArr = selectedCountriesStr.split(",");
Run Code Online (Sandbox Code Playgroud)

输入字符串 [10000,20000,304050,766666]

得到错误 java.util.regex.PatternSyntaxException: Unclosed character class near index 0

jlo*_*rdo 8

您必须转义方括号,因为replaceAll()将第一个参数解释为正则表达式:

replaceAll("\\[", "")
            ^^
Run Code Online (Sandbox Code Playgroud)

因为,正如错误消息告诉您的那样,它用于正则表达式中的字符类.双反斜杠是必要的,因为"\["它将是无效的转义序列.由于反斜杠被转义,正则表达式引擎只收到一个反斜杠.

另外,你可以使用

replace("[", "")
Run Code Online (Sandbox Code Playgroud)

它也将原样替换给定CharSequence的所有出现.

您可以在JavaDoc中阅读有关它的更多信息.


fge*_*fge 6

括号是正则表达式元字符,你需要用反斜杠作为前缀:

.replaceAll("\\[", "").replaceAll("\\]", "")
Run Code Online (Sandbox Code Playgroud)

此外,由于这是一个简单的字符串替换,您最好使用.replace():

.replace("[", "").replace("]", "")
Run Code Online (Sandbox Code Playgroud)