use*_*082 1 java stringbuilder append stringbuffer sonarqube
我目前正在做一段代码,必须能够匹配一些正则表达式,并在匹配正则表达式的字符串中进行一些替换.
为了做到这一点,我在java中使用matcher对象.但正如您可以在互联网上看到的那样,所有示例都使用StringBuffer来使用appendreplacement和appendtail方法(oracleDoc)进行替换.
但是当我推送我的代码时,Sonar抱怨使用stringbuffer而不是stringbuilder.
显然,一些开发人员抱怨这里.
我找到了一种不使用StringBuffer并使用StringBuilder的方法,但我确信这不如使用StringBuffer那样有效(并且可能是一种不好的做法).您可以在junit测试中复制粘贴,此示例代码如下:
String entry = "Actual 4.11-6 and 13-5";
String expectedReturn = "Actual 4*11^(-6) and 13^(-5)";
String number = "(^|\\s)-?\\d+((\\.||,)\\d+){0,1}(.\\d+){0,1}-\\d+";
Pattern pattern = Pattern.compile(number);
Matcher matcher = pattern.matcher(entry);
//USING STRING BUFFER
StringBuffer stringBuffer = new StringBuffer();
String substring;
while(matcher.find()){
substring = matcher.group(0);
matcher.appendReplacement(stringBuffer,substring.replace(".","*").replace("-","^(-")+")");
}
matcher.appendTail(stringBuffer);
//USING STRING BUILDER
matcher = pattern.matcher(entry);
int lastIndex = 0;
StringBuilder stringBuilder = new StringBuilder();
while(matcher.find()){
stringBuilder.append(entry.substring(lastIndex,matcher.start()));
substring = matcher.group(0);
stringBuilder.append(substring.replace(".","*").replace("-","^(-")+")");
lastIndex = matcher.end();
}
stringBuilder.append(entry.substring(lastIndex,entry.length()));
Assert.assertEquals(expectedReturn,stringBuffer.toString());
Assert.assertEquals(expectedReturn,stringBuilder.toString());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1689 次 |
| 最近记录: |