Java 如何解决对我的代码的投诉?

Java 如何解决对我的代码的投诉?,java,sonarqube,Java,Sonarqube,我想知道如何去掉字符串中所有的非字母 我有一个字符串s,其中可以包含许多非字母字符。例如,空格,点,斜线,以及任何其他不是来自a,b,c的疯狂的东西。。。而不是从A,B,C。。。Z 我只想保留那些a,b,c。。。z和A,B,C。。。Z 因此,我写道: private static String getGoodString(String s) { return s.replaceAll("[^a-zA-Z]", ""); } 这真的很有效,很开心

我想知道如何去掉字符串中所有的非字母

我有一个字符串s,其中可以包含许多非字母字符。例如,空格,点,斜线,以及任何其他不是来自a,b,c的疯狂的东西。。。而不是从A,B,C。。。Z

我只想保留那些a,b,c。。。z和A,B,C。。。Z

因此,我写道:

private static String getGoodString(String s) {
    return s.replaceAll("[^a-zA-Z]", "");
}
这真的很有效,很开心

然而,SonarQube抱怨:

重构此代码以使用“静态最终”模式

用支持Unicode的字符类替换这些字符范围


我怎样才能达到同样的效果(使用任何非字母表),同时又能让你感到非常高兴呢?

请尝试使用此版本:

//在您的类中
私有静态最终模式p=Pattern.compile(“[^\\p{Alpha}]”);
私有静态字符串getGoodString(字符串s){
返回p.matcher.replaceAll(“”);
}
这里我使用的是静态final
模式
。此外,regex
\p{Alpha}
是用于匹配任何字母字符的Unicode版本。

更改为

private static final Pattern regexpatern=Pattern.compile(“[^\\p{Alpha}]”,Pattern.CASE\u不区分大小写);
私有静态字符串getGoodString(字符串s){
返回regexpatern.matcher.replaceAll(“”);
}
package.com公司;
导入java.util.regex.Pattern;
公共班机{
私有静态最终模式regexpatern=Pattern.compile(“[^\\p{Alpha}]”,Pattern.CASE\u不区分大小写);
公共静态void main(字符串[]args){
字符串myPreferString=getGoodString(“d35545.343\343C3.~&%@#43x”);
System.out.println(“我的首选字符串:+myPreferString”);
字符串myPreferStringOld=getGoodStringOld(“d35545.343\343C3.~&%@#43x”);
System.out.println(“我的首选字符串(oldway):”+myPreferStringOld);
}
私有静态字符串getGoodString(字符串s){
返回regexpatern.matcher.replaceAll(“”);
}
私有静态字符串getGoodStringOld(字符串s){
返回s.replaceAll(“[^a-zA-Z]”,即“”);
}
}
(1)

应首选支持Unicode的字符类版本

(2)

不应不必要地创建正则表达式模式

(3)Javadoc

/**
*启用不区分大小写的匹配。
*
*默认情况下,不区分大小写的匹配假定只有字符
*在US-ASCII字符集中,正在进行匹配。支持Unicode
*通过指定{@link,可以启用不区分大小写的匹配
*#UNICODE_CASE}标志与此标志一起使用。
*
*也可以通过嵌入标志启用不区分大小写的匹配
*表达式{@code(?i)}。
*
*指定此标志可能会造成轻微的性能损失

*/ 公共静态final int不区分大小写=0x02;

\p{Alpha}
[a-zA-Z]
相同,例如,对于字符串,
Häuser123
,此代码将输出
Huser
而不是预期的字符串,
Häuser
@ArvindKumarAvinash请重新阅读OP,特别注意SonarQube投诉:
将这些字符范围替换为支持Unicode的字符类。
是,这就是我在我的评论@ArvindKumarAvinash中提到的OP不需要unicode感知类,这是SonarQube建议的,但这不符合他们的要求。那
Häuser123
应该会导致
Häuser
是您提出的要求,因为它不是从问题开始的。@ArvindKumarAvinash和我重复:
\p{Alpha}
是OP想要的,所以如果这还不足以关闭声纳,那么OP将需要添加一个抑制。您将不得不接受它。在你调整之前,没有办法让你对你的案子感到满意。非常感谢@NVy的回答,非常感谢。不幸的是,它现在产生了“启用”UNICODE_字符_类”标志或使用UNICODE感知的替代方案
/**
 * Enables case-insensitive matching.
 *
 * <p> By default, case-insensitive matching assumes that only characters
 * in the US-ASCII charset are being matched.  Unicode-aware
 * case-insensitive matching can be enabled by specifying the {@link
 * #UNICODE_CASE} flag in conjunction with this flag.
 *
 * <p> Case-insensitive matching can also be enabled via the embedded flag
 * expression&nbsp;{@code (?i)}.
 *
 * <p> Specifying this flag may impose a slight performance penalty.  </p>
 */
public static final int CASE_INSENSITIVE = 0x02;