Improve performance of StringUtils.deleteAny()

This commit is contained in:
Сергей Цыпанов 2020-04-06 15:11:05 +03:00 committed by Juergen Hoeller
parent 8c0aaf4863
commit e1951a098b
2 changed files with 8 additions and 8 deletions

View File

@ -453,17 +453,17 @@ public abstract class StringUtils {
return inString; return inString;
} }
StringBuilder sb = new StringBuilder(inString.length()); int lastCharIndex = 0;
char[] result = new char[inString.length()];
for (int i = 0; i < inString.length(); i++) { for (int i = 0; i < inString.length(); i++) {
char c = inString.charAt(i); char c = inString.charAt(i);
if (charsToDelete.indexOf(c) == -1) { if (charsToDelete.indexOf(c) == -1) {
sb.append(c); result[lastCharIndex++] = c;
} }
} }
return sb.toString(); return new String(result, 0, lastCharIndex);
} }
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// Convenience methods for working with formatted Strings // Convenience methods for working with formatted Strings
//--------------------------------------------------------------------- //---------------------------------------------------------------------

View File

@ -306,7 +306,7 @@ class StringUtilsTests {
void quoteIfString() { void quoteIfString() {
assertThat(StringUtils.quoteIfString("myString")).isEqualTo("'myString'"); assertThat(StringUtils.quoteIfString("myString")).isEqualTo("'myString'");
assertThat(StringUtils.quoteIfString("")).isEqualTo("''"); assertThat(StringUtils.quoteIfString("")).isEqualTo("''");
assertThat(StringUtils.quoteIfString(5)).isEqualTo(Integer.valueOf(5)); assertThat(StringUtils.quoteIfString(5)).isEqualTo(5);
assertThat(StringUtils.quoteIfString(null)).isNull(); assertThat(StringUtils.quoteIfString(null)).isNull();
} }
@ -498,7 +498,7 @@ class StringUtilsTests {
void tokenizeToStringArrayWithNotIgnoreEmptyTokens() { void tokenizeToStringArrayWithNotIgnoreEmptyTokens() {
String[] sa = StringUtils.tokenizeToStringArray("a,b , ,c", ",", true, false); String[] sa = StringUtils.tokenizeToStringArray("a,b , ,c", ",", true, false);
assertThat(sa.length).isEqualTo(4); assertThat(sa.length).isEqualTo(4);
assertThat(sa[0].equals("a") && sa[1].equals("b") && sa[2].equals("") && sa[3].equals("c")).as("components are correct").isTrue(); assertThat(sa[0].equals("a") && sa[1].equals("b") && sa[2].isEmpty() && sa[3].equals("c")).as("components are correct").isTrue();
} }
@Test @Test
@ -539,7 +539,7 @@ class StringUtilsTests {
} }
@Test @Test
void delimitedListToStringArrayWithEmptyString() { void delimitedListToStringArrayWithEmptyDelimiter() {
String[] sa = StringUtils.delimitedListToStringArray("a,b", ""); String[] sa = StringUtils.delimitedListToStringArray("a,b", "");
assertThat(sa.length).isEqualTo(3); assertThat(sa.length).isEqualTo(3);
assertThat(sa[0]).isEqualTo("a"); assertThat(sa[0]).isEqualTo("a");
@ -601,7 +601,7 @@ class StringUtilsTests {
// Could read these from files // Could read these from files
String[] sa = StringUtils.commaDelimitedListToStringArray("a,,b"); String[] sa = StringUtils.commaDelimitedListToStringArray("a,,b");
assertThat(sa.length).as("a,,b produces array length 3").isEqualTo(3); assertThat(sa.length).as("a,,b produces array length 3").isEqualTo(3);
assertThat(sa[0].equals("a") && sa[1].equals("") && sa[2].equals("b")).as("components are correct").isTrue(); assertThat(sa[0].equals("a") && sa[1].isEmpty() && sa[2].equals("b")).as("components are correct").isTrue();
sa = new String[] {"", "", "a", ""}; sa = new String[] {"", "", "a", ""};
doTestCommaDelimitedListToStringArrayLegalMatch(sa); doTestCommaDelimitedListToStringArrayLegalMatch(sa);