我已经实现了regex表达式来删除所有带有空字符串的特殊字符并删除空格(如果有),这在我的代码中运行良好,但sonarQUbe抱怨这是不兼容的解决方案,有人能告诉我如何解决这个问题吗
String c = "test10101010test%79%% %%% $$$ \t \n $$$#$@^$%~`***c 33";
Pattern pt = Pattern.compile("[\\W\\s+]");
Matcher match= pt.matcher(c);
while(match.find())
{
c=c.replaceAll("\\"+match.group(), "").toLowerCase();
}
System.out.println(c);
我在"[\\W\\s+]"
得到错误。得到下面的错误删除重复在这个字符类。
有人能建议如何解决这个问题吗?
2条答案
按热度按时间axzmvihb1#
您的正则表达式是一个字符类
[...]
。它匹配\W
(除字母、数字或连接符标点符号(ASCII模式中的下划线)以外的字符)、\s
(空白)和+
字符。您得到的错误与+
和空白字符都可以与\W
匹配这一事实有关。因此,您的模式基本上是
\W
。注意,它不匹配标点字符下划线。如果您想删除除字母数字字符以外的所有字符,请使用[\W_]
或\P{Alnum}
模式。此外,您通常不需要在更换前检查是否匹配,以下应该足够了:
注意如果您指定了不区分大小写的标志
/i
,并使用字符类来匹配两种大小写的字母,如[zZ]
(/[zZ]/i
),则会出现此警告。很明显,您需要在此处用单个字母z
或Z
替换字符类。ssm49v7z2#
正如Wiktor Stribizew在评论部分提到的,解决SonarQube问题的方法是