我正在尝试拆分可能包含也可能不包含字符"["和"]"的字符串,并且在放置条件"如果字符串包含 [ 或 ]"但得到一个
java.util.regex.PatternSyntaxException: 未闭合字符类附近 索引 1
[
^
如果我对 Split 参数使用"\[",系统输出说字符串是 \[,如果我删除其中一个 \,它显然会出现编译错误。使用\[我的简单拆分不起作用。添加更多 \ 无济于事。
我尝试了字符串 x = Pattern.quote("["(; 然后拆分为 x,但没有。它不起作用。
我正在使用Java呃...8?因为我可以将完整的方法放入接口和 Spring 框架中。我不知道它是否改变了某些东西,但我也连接到 SQL 数据库,但数据被读取,所以我怀疑问题是否存在。
为好奇的人编写代码。
public List<String> equippableBy()
{
List<String> list = new ArrayList<String>();
String bracket = "\[";
if(desc.contains(bracket))
{
String[] lista = desc.split(bracket);
String[] classi = lista[1].split("-");
for(int i = 0; i < classi.length; i++)
{
if(!classi[i].contains(bracket))
list.add(classi[i]);
else
list.add(classi[i].split(bracket)[0]);
}
return list;
}
else
{
list.add("Not Equippable");
return list;
}
}
编辑:我也注意到这里逃脱反斜杠的问题。我的意思是双反斜杠不会显示单个 [ 用于拆分。
String#contains
不接受像String#split
这样的正则表达式。
改变
if(desc.contains(bracket))
自
if(desc.contains("["))
另外,更改
if(!classi[i].contains(bracket))
自
if(!classi[i].contains("["))
或者,您可以将bracket
定义为文本括号并使用Pattern.quote
进行拆分。
final String bracket = "[";
//...
list.add(classi[i].split(Pattern.quote(bracket))[0]);