Ranides Atterwim 10 سال پیش
والد
کامیت
4c39b1b53b

+ 13 - 7
assira/src/main/java/net/ranides/assira/text/StringUtils.java

@@ -288,12 +288,18 @@ public final class StringUtils {
     }
 	
     public static String remove(String text, String fragment) {
-        StringTokenizer tokenizer = new StringTokenizer(text, fragment, false);
-        StringBuilder result = new StringBuilder( text.length() );
-        while (tokenizer.hasMoreElements()) {
-            result.append( tokenizer.nextElement() );
-        }
-        return result.toString();
+		if(fragment.isEmpty()) {
+			return text;
+		}
+		StringBuilder result = new StringBuilder( text.length() );
+		int n = fragment.length();
+		int p = 0;
+		int c;
+		while(-1 != (c = text.indexOf(fragment,p))) {
+			result.append(text, p, c);
+			p = c + n;
+		}
+		return result.append(text, p, text.length()).toString();
     }
 
     public static String remove(String text, char value) {
@@ -398,7 +404,7 @@ public final class StringUtils {
         }
         int delta = (newval.length()-1);
 
-        StringBuilder buf = new StringBuilder(text.length() + 16*delta );
+        StringBuilder buf = new StringBuilder(text.length() + MathUtils.clip(16*delta, 0, 128) );
         while (end != -1) {
             buf.append(text.substring(start, end)).append(newval);
             start = end + 1;

+ 155 - 0
assira/src/test/java/net/ranides/assira/text/StringUtilsTest.java

@@ -0,0 +1,155 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.text;
+
+import java.util.Arrays;
+import java.util.regex.Pattern;
+import org.junit.Test;
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public class StringUtilsTest {
+	
+	public StringUtilsTest() {
+	}
+
+	@Test
+	public void testQuote() {
+		assertEquals("\"\"", StringUtils.quote(""));
+		assertEquals("\"abc\"", StringUtils.quote("abc"));
+		assertEquals("\"\\\"abc\\\"\"", StringUtils.quote("\"abc\""));
+		assertEquals("\"a\\\"bc\"", StringUtils.quote("a\"bc"));
+	}
+	
+	@Test
+	public void testUnquote() {
+		assertEquals("", StringUtils.unquote(""));
+		assertEquals("", StringUtils.unquote("\"\""));
+		
+		assertEquals("abc", StringUtils.unquote("abc"));
+		assertEquals("abc", StringUtils.unquote("\"abc\""));
+		assertEquals("\"abc\"", StringUtils.unquote("\"\\\"abc\\\"\""));
+		assertEquals("a\"bc", StringUtils.unquote("\"a\\\"bc\""));
+		assertEquals("a\\\"bc", StringUtils.unquote("a\\\"bc"));
+	}
+	
+	@Test
+	public void testSplit() {
+		assertEquals(Arrays.asList(), StringUtils.split(""));
+		assertEquals(Arrays.asList("a"), StringUtils.split("a"));
+		
+		assertEquals(Arrays.asList("a", "bc", "d"), StringUtils.split("a bc d"));
+		assertEquals(Arrays.asList("a", "bc", "d"), StringUtils.split("a   bc d"));
+		assertEquals(Arrays.asList("a", "bc", "d"), StringUtils.split("a   bc   d  "));
+		
+		assertEquals(Arrays.asList("a", "bc q", "d"), StringUtils.split("a   \"bc q\"   d  "));
+	}
+	
+	@Test
+	public void testCompile() {
+		assertEquals("Hello \\ ' \" \r \n \t \b \f \033 \033[ \066 world", StringUtils.compile("Hello \\\\ ' \" \\r \\n \\t \\b \\f \\e \\^ \\066 world"));
+	}
+	
+	@Test
+	public void testRemove() {
+		assertEquals("Hello world", StringUtils.remove("Heltumlo wortumld", "tum"));
+		assertEquals("Hello world", StringUtils.remove("Heltumlo wortumldtum", "tum"));
+		assertEquals("Hello world", StringUtils.remove("tumHeltumlo wortumldtum", "tum"));
+		assertEquals("Hello world", StringUtils.remove("Helretlo wretorld", "ret"));
+		assertEquals("Hello world", StringUtils.remove("Helretlo wretorldret", "ret"));
+		assertEquals("Hello world", StringUtils.remove("retHelretlo wretorldret", "ret"));
+		
+		assertEquals("Hello world", StringUtils.remove("Helqlo wqorqld", "q"));
+		assertEquals("Hello world", StringUtils.remove("qHelqlo wqorqld", "q"));
+		assertEquals("Hello world", StringUtils.remove("Hello world", ""));
+		assertEquals("Hello world", StringUtils.remove("Hello world", "tem"));
+	}
+	
+	@Test
+	public void testRemove_char() {
+		assertEquals("Hello world", StringUtils.remove("Helqlo wqorqld", 'q'));
+		assertEquals("Hello world", StringUtils.remove("Helqlo wqorqldq", 'q'));
+		assertEquals("Hello world", StringUtils.remove("qHelqlo wqorqld", 'q'));
+	}
+	
+	@Test
+	public void testRemovePrefix() {
+		assertEquals("Hello world", StringUtils.removePrefix("QeHello world", "Qe"));
+		assertEquals("Hello world", StringUtils.removePrefix("HeHello world", "He"));
+		assertEquals("Hello world", StringUtils.removePrefix("Hello world", "Ha"));
+		
+		assertEquals("", StringUtils.removePrefix("Ha", "Ha"));
+		assertEquals("", StringUtils.removePrefix("", "Ha"));
+		assertEquals("Ha", StringUtils.removePrefix("Ha", "Hat"));
+	}
+	
+	@Test
+	public void testRemoveSuffix() {
+		assertEquals("Hello world", StringUtils.removeSuffix("Hello worldQe", "Qe"));
+		assertEquals("Hello world", StringUtils.removeSuffix("Hello worldld", "ld"));
+		assertEquals("Hello world", StringUtils.removeSuffix("Hello world", "ad"));
+		
+		assertEquals("", StringUtils.removeSuffix("Ha", "Ha"));
+		assertEquals("", StringUtils.removeSuffix("", "Ha"));
+		assertEquals("Ha", StringUtils.removeSuffix("Ha", "Hat"));
+	}
+	
+	@Test
+	public void testCondense() {
+		assertEquals(" ", StringUtils.condense("    ", ' '));
+		assertEquals(" ", StringUtils.condense(" ", ' '));
+		assertEquals("", StringUtils.condense("", ' '));
+		
+		assertEquals("a b c", StringUtils.condense("a b c", ' '));
+		assertEquals(" a b c", StringUtils.condense("   a b c", ' '));
+		assertEquals(" a b c ", StringUtils.condense("   a b   c   ", ' '));
+	}
+	
+	@Test
+	public void testLtrim() {
+		assertEquals("", StringUtils.ltrim("    "));
+		assertEquals("abc  ", StringUtils.ltrim("    abc  "));
+		assertEquals("abc  ", StringUtils.ltrim("abc  "));
+	}
+	
+	@Test
+	public void testRtrim() {
+		assertEquals("", StringUtils.rtrim("    "));
+		assertEquals("  abc", StringUtils.rtrim("  abc    "));
+		assertEquals("  abc", StringUtils.rtrim("  abc"));
+	}
+	
+	@Test
+	public void testTrim() {
+		assertEquals("", StringUtils.trim("    "));
+		assertEquals("abc", StringUtils.trim("    abc  "));
+		assertEquals("abc", StringUtils.trim("abc  "));
+		assertEquals("abc", StringUtils.trim("  abc"));
+	}
+	
+	@Test
+	public void testReplaceFunction() {
+		assertEquals("A=7 B=14 C=21", StringUtils.replace("A=#1 B=#2 C=#3", Pattern.compile("#([0-9])"), hit -> 
+			String.valueOf(7*Integer.parseInt(hit.group(1))) 
+		));
+	}
+	
+	@Test
+	public void testReplaceChar() {
+		assertEquals("A=$1 B=$2 C=$3", StringUtils.replace("A=#1 B=#2 C=#3", '#', '$'));
+		
+		assertEquals("A=1 B=2 C=3", StringUtils.replace("A=#1 B=#2 C=#3", '#', ""));
+		
+		assertEquals("A=d1 B=d2 C=d3", StringUtils.replace("A=#1 B=#2 C=#3", '#', "d"));
+		
+		assertEquals("A=num1 B=num2 C=num3", StringUtils.replace("A=#1 B=#2 C=#3", '#', "num"));
+	}
+	
+}