This is an automated email from the ASF dual-hosted git repository.
theigl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/master by this push:
new 38ec134 WICKET-6838 Improve performance of Strings.split
new 4202910 Merge pull request #456 from
theigl/WICKET-6838-split-performance
38ec134 is described below
commit 38ec134d86464a3d2f963dabf0460dc63e9bfdd0
Author: Thomas Heigl <[email protected]>
AuthorDate: Fri Oct 2 10:23:15 2020 +0200
WICKET-6838 Improve performance of Strings.split
---
.../org/apache/wicket/util/string/Strings.java | 20 ++++++-
.../org/apache/wicket/util/string/StringsTest.java | 69 ++++++++++++----------
2 files changed, 55 insertions(+), 34 deletions(-)
diff --git
a/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
b/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
index b948292..8427566 100755
--- a/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
+++ b/wicket-util/src/main/java/org/apache/wicket/util/string/Strings.java
@@ -823,11 +823,26 @@ public final class Strings
{
return NO_STRINGS;
}
+
+ int pos = s.indexOf(c);
+ if (pos == -1)
+ {
+ return new String[] { s };
+ }
+
+ int next = s.indexOf(c, pos + 1);
+ if (next == -1)
+ {
+ return new String[] { s.substring(0, pos),
s.substring(pos + 1) };
+ }
+
final List<String> strings = new ArrayList<>();
- int pos = 0;
+ strings.add(s.substring(0, pos));
+ strings.add(s.substring(pos + 1, next));
while (true)
{
- int next = s.indexOf(c, pos);
+ pos = next + 1;
+ next = s.indexOf(c, pos);
if (next == -1)
{
strings.add(s.substring(pos));
@@ -837,7 +852,6 @@ public final class Strings
{
strings.add(s.substring(pos, next));
}
- pos = next + 1;
}
final String[] result = new String[strings.size()];
strings.toArray(result);
diff --git
a/wicket-util/src/test/java/org/apache/wicket/util/string/StringsTest.java
b/wicket-util/src/test/java/org/apache/wicket/util/string/StringsTest.java
index 47a0ec0..4797d94 100644
--- a/wicket-util/src/test/java/org/apache/wicket/util/string/StringsTest.java
+++ b/wicket-util/src/test/java/org/apache/wicket/util/string/StringsTest.java
@@ -16,19 +16,24 @@
*/
package org.apache.wicket.util.string;
-import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.List;
-import static org.junit.jupiter.api.Assertions.*;
+import org.junit.jupiter.api.Test;
@SuppressWarnings("javadoc")
public class StringsTest
{
@Test
- public void stripJSessionId()
+ void stripJSessionId()
{
String url = "http://localhost/abc";
assertEquals(url, Strings.stripJSessionId(url));
@@ -48,7 +53,7 @@ public class StringsTest
}
@Test
- public void test()
+ void test()
{
assertEquals("foo", Strings.lastPathComponent("bar:garply:foo",
':'));
assertEquals("foo", Strings.lastPathComponent("foo", ':'));
@@ -70,7 +75,7 @@ public class StringsTest
}
@Test
- public void beforeFirst()
+ void beforeFirst()
{
assertNull(Strings.beforeFirst(null, '.'));
assertEquals("", Strings.beforeFirst("", '.'));
@@ -83,7 +88,7 @@ public class StringsTest
}
@Test
- public void afterFirst()
+ void afterFirst()
{
assertNull(Strings.afterFirst(null, '.'));
assertEquals("", Strings.afterFirst("", '.'));
@@ -96,7 +101,7 @@ public class StringsTest
}
@Test
- public void afterLast()
+ void afterLast()
{
assertNull(Strings.afterLast(null, '.'));
assertEquals("", Strings.afterLast("", '.'));
@@ -109,7 +114,7 @@ public class StringsTest
}
@Test
- public void beforeLastPathComponent()
+ void beforeLastPathComponent()
{
assertNull(Strings.beforeLastPathComponent(null, '.'));
assertEquals("", Strings.beforeLastPathComponent("", '.'));
@@ -123,7 +128,7 @@ public class StringsTest
}
@Test
- public void capitalize()
+ void capitalize()
{
assertEquals("Lorem ipsum dolor sit amet",
Strings.capitalize("lorem ipsum dolor sit amet"));
@@ -135,7 +140,7 @@ public class StringsTest
}
@Test
- public void escapeMarkup()
+ void escapeMarkup()
{
assertNull(Strings.escapeMarkup(null));
assertEquals("", Strings.escapeMarkup("").toString());
@@ -167,7 +172,7 @@ public class StringsTest
}
@Test
- public void escapeMarkupWhiteSpace()
+ void escapeMarkupWhiteSpace()
{
assertNull(Strings.escapeMarkup(null, true));
assertEquals("", Strings.escapeMarkup("", true).toString());
@@ -180,7 +185,7 @@ public class StringsTest
}
@Test
- public void escapeMarkupUnicode()
+ void escapeMarkupUnicode()
{
assertNull(Strings.escapeMarkup(null, true, true));
assertEquals("", Strings.escapeMarkup("", true,
true).toString());
@@ -195,7 +200,7 @@ public class StringsTest
}
@Test
- public void replaceHtmlEscapeNumber()
+ void replaceHtmlEscapeNumber()
{
assertNull(Strings.replaceHtmlEscapeNumber(null));
assertEquals("", Strings.replaceHtmlEscapeNumber(""));
@@ -212,7 +217,7 @@ public class StringsTest
}
@Test
- public void firstPathComponent()
+ void firstPathComponent()
{
assertNull(Strings.firstPathComponent(null, '.'));
assertEquals("", Strings.firstPathComponent("", '.'));
@@ -222,7 +227,7 @@ public class StringsTest
}
@Test
- public void isEmpty()
+ void isEmpty()
{
assertTrue(Strings.isEmpty(null));
assertTrue(Strings.isEmpty(""));
@@ -234,7 +239,7 @@ public class StringsTest
}
@Test
- public void isTrue() throws StringValueConversionException
+ void isTrue() throws StringValueConversionException
{
assertFalse(Strings.isTrue(null));
assertFalse(Strings.isTrue(""));
@@ -259,7 +264,7 @@ public class StringsTest
}
@Test
- public void invalidIsTrue()
+ void invalidIsTrue()
{
assertThrows(StringValueConversionException.class, () -> {
Strings.isTrue("foo");
@@ -268,7 +273,7 @@ public class StringsTest
}
@Test
- public void replaceAll()
+ void replaceAll()
{
assertNull(Strings.replaceAll(null, null, null));
assertNull(Strings.replaceAll(null, "", null));
@@ -302,20 +307,22 @@ public class StringsTest
}
@Test
- public void split()
+ void split()
{
assertArrayEquals(new String[0], Strings.split(null, '.'));
assertArrayEquals(new String[0], Strings.split("", '.'));
assertArrayEquals(new String[] { "", "" }, Strings.split(".",
'.'));
assertArrayEquals(new String[] { "a", "" }, Strings.split("a.",
'.'));
assertArrayEquals(new String[] { "a", "b" },
Strings.split("a.b", '.'));
+ assertArrayEquals(new String[] { "a", "b", "" },
Strings.split("a.b.", '.'));
+ assertArrayEquals(new String[] { "", "b", "" },
Strings.split(".b.", '.'));
assertArrayEquals(new String[] { "a", "b", "c" },
Strings.split("a.b.c", '.'));
assertArrayEquals(new String[] { "a", "b", "c" },
Strings.split("a b c", ' '));
assertArrayEquals(new String[] { "abc" }, Strings.split("abc",
' '));
}
@Test
- public void stripEnding()
+ void stripEnding()
{
assertNull(Strings.stripEnding(null, null));
assertEquals("", Strings.stripEnding("", null));
@@ -327,7 +334,7 @@ public class StringsTest
}
@Test
- public void toBoolean() throws StringValueConversionException
+ void toBoolean() throws StringValueConversionException
{
assertEquals(Boolean.FALSE, Strings.toBoolean(null));
assertEquals(Boolean.FALSE, Strings.toBoolean("off"));
@@ -344,7 +351,7 @@ public class StringsTest
}
@Test
- public void invalidToBoolean()
+ void invalidToBoolean()
{
assertThrows(StringValueConversionException.class, () -> {
Strings.toBoolean("waar");
@@ -352,14 +359,14 @@ public class StringsTest
}
@Test
- public void toChar()
+ void toChar()
{
assertEquals(' ', Strings.toChar(" "));
assertEquals('a', Strings.toChar("a"));
}
@Test
- public void invalidToChar1()
+ void invalidToChar1()
{
assertThrows(StringValueConversionException.class, () -> {
Strings.toChar("");
@@ -368,7 +375,7 @@ public class StringsTest
}
@Test
- public void invalidToChar2()
+ void invalidToChar2()
{
assertThrows(StringValueConversionException.class, () -> {
@@ -377,7 +384,7 @@ public class StringsTest
}
@Test
- public void invalidToChar3()
+ void invalidToChar3()
{
assertThrows(StringValueConversionException.class, () -> {
Strings.toChar("aa");
@@ -385,7 +392,7 @@ public class StringsTest
}
@Test
- public void toMultilineMarkup()
+ void toMultilineMarkup()
{
assertNull(Strings.toMultilineMarkup(null));
assertEquals("<p></p>",
Strings.toMultilineMarkup("").toString());
@@ -417,7 +424,7 @@ public class StringsTest
}
@Test
- public void testToString()
+ void testToString()
{
assertNull(Strings.toString((Object)null));
assertEquals("", Strings.toString(""));
@@ -436,7 +443,7 @@ public class StringsTest
}
@Test
- public void toStringThrowable()
+ void toStringThrowable()
{
NullPointerException np = new NullPointerException("null test");
RuntimeException wre = new RuntimeException("null test", np);
@@ -446,7 +453,7 @@ public class StringsTest
}
@Test
- public void testJoin() throws Exception
+ void testJoin() throws Exception
{
List<String> fragments = Arrays.asList("foo", "bar", "baz");
@@ -457,7 +464,7 @@ public class StringsTest
}
@Test
- public void testNonchar()
+ void testNonchar()
{
assertEquals("",
Strings.escapeMarkup("\ufffe\uFDDF\uFDE0\uFDD0\uFDEF").toString());
assertEquals("",
Strings.toEscapedUnicode("\ufffe\uFDDF\uFDE0\uFDD0\uFDEF"));