// Copyright (c) 2003-present, Jodd Team (http://jodd.org)
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
package jodd.util;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import static jodd.util.ArraysUtil.*;
import static jodd.util.StringPool.ISO_8859_1;
import static jodd.util.StringPool.UTF_8;
import static org.junit.Assert.*;
public class StringUtilTest {
@Test
public void testSplit() {
String src = "1,22,3,44,5";
String[] r;
r = StringUtil.split(src, ",");
assertEquals(5, r.length);
assertEquals("1", r[0]);
assertEquals("22", r[1]);
assertEquals("3", r[2]);
assertEquals("44", r[3]);
assertEquals("5", r[4]);
src = "1,22,,,5";
r = StringUtil.split(src, ",");
assertEquals(5, r.length);
assertEquals("1", r[0]);
assertEquals("22", r[1]);
assertEquals("", r[2]);
assertEquals("", r[3]);
assertEquals("5", r[4]);
src = "173";
r = StringUtil.split(src, ",");
assertEquals(1, r.length);
assertEquals("173", r[0]);
src = ",";
r = StringUtil.split(src, ",");
assertEquals(2, r.length);
assertEquals("", r[0]);
assertEquals("", r[1]);
}
@Test
public void testSplit2() {
String src = "1,22,3,44,5";
String[] r;
assertArrayEquals(new String[]{src}, StringUtil.splitc(src, new char[]{}));
assertArrayEquals(new String[]{""}, StringUtil.splitc("", new char[]{','}));
assertArrayEquals(new String[]{""}, StringUtil.splitc("", ','));
r = StringUtil.splitc(src, "");
assertEquals(1, r.length);
assertEquals(src, r[0]);
r = StringUtil.splitc(src, "a,.q");
assertEquals(5, r.length);
assertEquals("1", r[0]);
assertEquals("22", r[1]);
assertEquals("3", r[2]);
assertEquals("44", r[3]);
assertEquals("5", r[4]);
src = "1,22,,,5";
r = StringUtil.splitc(src, ",");
assertEquals(3, r.length);
assertEquals("1", r[0]);
assertEquals("22", r[1]);
assertEquals("5", r[2]);
r = StringUtil.splitc(src, ',');
assertEquals(3, r.length);
assertEquals("1", r[0]);
assertEquals("22", r[1]);
assertEquals("5", r[2]);
src = "173";
r = StringUtil.splitc(src, ",");
assertEquals(1, r.length);
assertEquals("173", r[0]);
src = "173";
r = StringUtil.splitc(src, ',');
assertEquals(1, r.length);
assertEquals("173", r[0]);
src = ",";
r = StringUtil.splitc(src, ",");
assertEquals(2, r.length);
assertEquals("", r[0]);
assertEquals("", r[1]);
src = ",";
r = StringUtil.splitc(src, ',');
assertEquals(2, r.length);
assertEquals("", r[0]);
assertEquals("", r[1]);
src = "1, 22 , 5";
r = StringUtil.splitc(src, ", ");
assertEquals(3, r.length);
assertEquals("1", r[0]);
assertEquals("22", r[1]);
assertEquals("5", r[2]);
src = " , 22 , 5";
r = StringUtil.splitc(src, ", ");
assertEquals(3, r.length);
assertEquals("", r[0]);
assertEquals("22", r[1]);
assertEquals("5", r[2]);
}
@Test
public void testReplace() {
String src = "12345";
assertEquals("12qwe45", StringUtil.replace(src, "3", "qwe"));
assertEquals("1234qwe", StringUtil.replace(src, "5", "qwe"));
assertEquals("qwe2345", StringUtil.replace(src, "1", "qwe"));
assertEquals(src, StringUtil.replace(src, "0", "qwe"));
assertEquals(src, StringUtil.replace(src, "0", null));
src = "100010001";
assertEquals("dd000dd000dd", StringUtil.replace(src, "1", "dd"));
assertEquals(src, StringUtil.replace(src, "2", "dd"));
src = "qweqwe";
assertEquals("QWEQWE", StringUtil.replace(src, "qwe", "QWE"));
src = "11221144";
assertEquals(src, StringUtil.replaceFirst(src, '5', '5'));
assertEquals(src, StringUtil.replaceLast(src, '5', '5'));
src = StringUtil.replaceFirst(src, "11", "55");
assertEquals("55221144", src);
src = StringUtil.replaceFirst(src, "11", "55");
assertEquals("55225544", src);
src = StringUtil.replaceFirst(src, "11", "55");
assertEquals("55225544", src);
String src2 = StringUtil.replaceFirst(src, '5', 'a');
assertEquals("a5225544", src2);
src2 = StringUtil.replaceLast(src2, '5', 'x');
assertEquals("a5225x44", src2);
src = StringUtil.replaceLast(src, "55", "11");
assertEquals("55221144", src);
src = StringUtil.replaceLast(src, "55", "11");
assertEquals("11221144", src);
src = StringUtil.replaceLast(src, "55", "11");
assertEquals("11221144", src);
}
@Test
public void testIndexOf() {
String src = "1234567890qWeRtY";
assertEquals(1, StringUtil.indexOfIgnoreCase(src, new String[]{"345", "234"})[0]);
assertEquals(1, StringUtil.indexOfIgnoreCase(src, new String[]{"345", "234"})[1]);
assertEquals(0, StringUtil.lastIndexOfIgnoreCase(src, new String[]{"345", "234"})[0]);
assertEquals(2, StringUtil.lastIndexOfIgnoreCase(src, new String[]{"345", "234"})[1]);
assertEquals(10, StringUtil.indexOf(src, 'q', 5, 20));
assertEquals(10, StringUtil.indexOfIgnoreCase(src, 'Q', 5, 20));
assertEquals(-1, StringUtil.lastIndexOf("123", "12345", 0, 5));
assertEquals(-1, StringUtil.lastIndexOf("", 'a', 0, 5));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase("", 'a', 0, 5));
assertEquals(10, StringUtil.lastIndexOfIgnoreCase(src, 'Q', 20, 1));
assertEquals(0, StringUtil.indexOfIgnoreCase(src, "123"));
assertEquals(0, StringUtil.lastIndexOfIgnoreCase(src, "123"));
assertEquals(0, src.lastIndexOf("123"));
assertTrue(StringUtil.startsWithIgnoreCase(src, "123"));
assertTrue(StringUtil.endsWithIgnoreCase(src, "y"));
assertTrue(StringUtil.endsWithIgnoreCase(src, "qwerty"));
assertFalse(StringUtil.endsWithIgnoreCase(src, "qwert"));
assertFalse(StringUtil.endsWithIgnoreCase(src, "q"));
assertFalse(StringUtil.endsWithIgnoreCase("123", "12345"));
assertEquals(0, StringUtil.indexOfIgnoreCase(src, "1234567890QwErTy"));
assertEquals(0, StringUtil.lastIndexOfIgnoreCase(src, "1234567890QwErTy"));
assertTrue(StringUtil.startsWithIgnoreCase(src, "1234567890QwErTy"));
assertTrue(StringUtil.endsWithIgnoreCase(src, "1234567890QwErTy"));
assertEquals(1, StringUtil.indexOfIgnoreCase(src, "2345"));
assertEquals(1, StringUtil.lastIndexOfIgnoreCase(src, "2345"));
assertFalse(StringUtil.startsWithIgnoreCase(src, "2345"));
assertEquals(10, StringUtil.indexOfIgnoreCase(src, "qwe"));
assertEquals(10, StringUtil.lastIndexOfIgnoreCase(src, "qwe"));
assertTrue(StringUtil.startsWithIgnoreCase(src, "qwe", 10));
assertEquals(10, StringUtil.indexOfIgnoreCase(src, "qwerty"));
assertEquals(10, StringUtil.lastIndexOfIgnoreCase(src, "qwerty"));
assertTrue(StringUtil.startsWithIgnoreCase(src, "qwerty", 10));
assertEquals(10, StringUtil.indexOfIgnoreCase(src, "QWERTY"));
assertEquals(10, StringUtil.lastIndexOfIgnoreCase(src, "QWERTY"));
assertTrue(StringUtil.startsWithIgnoreCase(src, "QWERTY", 10));
assertEquals(-1, StringUtil.indexOfIgnoreCase(src, "qwertyu"));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase(src, "qwertyu"));
assertFalse(StringUtil.startsWithIgnoreCase(src, "qwertyu", 10));
assertEquals(10, StringUtil.indexOfIgnoreCase(src, "qwerty", 9));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase(src, "qwerty", 9));
assertEquals(-1, src.lastIndexOf("qWeRtY", 9));
assertEquals(-1, StringUtil.indexOfIgnoreCase(src, "qwerty", 11));
assertEquals(10, StringUtil.lastIndexOfIgnoreCase(src, "qwerty", 11));
assertEquals(10, src.lastIndexOf("qWeRtY", 11));
assertEquals(10, StringUtil.lastIndexOfIgnoreCase(src, "qwerty", 10));
assertEquals(10, src.lastIndexOf("qWeRtY", 10));
assertFalse(StringUtil.startsWithIgnoreCase(src, "qwerty", 11));
src = "AAA111aaa";
assertEquals(0, StringUtil.indexOfIgnoreCase(src, "aaa", 0));
assertEquals(0, StringUtil.lastIndexOfIgnoreCase(src, "aaa", 0));
assertEquals(0, src.lastIndexOf("AAA", 0));
assertTrue(StringUtil.startsWithIgnoreCase(src, "aaa", 0));
assertTrue(StringUtil.startsWithIgnoreCase(src, "aa", 1));
assertTrue(StringUtil.startsWithIgnoreCase(src, "a", 2));
assertTrue(StringUtil.startsWithIgnoreCase(src, "A", 6));
assertTrue(StringUtil.startsWithIgnoreCase(src, "AA", 6));
assertTrue(StringUtil.startsWithIgnoreCase(src, "AAA", 6));
assertFalse(StringUtil.startsWithIgnoreCase(src, "AAAA", 6));
assertEquals(6, StringUtil.indexOfIgnoreCase(src, "aaa", 1));
assertEquals(6, StringUtil.lastIndexOfIgnoreCase(src, "aaa", 7));
assertEquals(6, src.lastIndexOf("aaa", 7));
src = "123";
assertEquals(-1, StringUtil.indexOfIgnoreCase(src, "1234"));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase(src, "1234"));
assertEquals(0, StringUtil.indexOfIgnoreCase(src, ""));
assertEquals(3, StringUtil.lastIndexOfIgnoreCase(src, ""));
assertEquals(3, src.lastIndexOf(""));
// boundaries
assertEquals(-1, StringUtil.indexOf("xxx", "a", -1, 20));
assertEquals(-1, StringUtil.indexOf("xxx", "a", 0, 20));
assertEquals(-1, StringUtil.indexOf("xxx", "a", 10, 20));
assertEquals(-1, StringUtil.indexOf("xxx", 'a', -1, 20));
assertEquals(-1, StringUtil.indexOf("xxx", 'a', 0, 20));
assertEquals(-1, StringUtil.indexOf("xxx", 'a', 10, 20));
assertEquals(-1, StringUtil.indexOfIgnoreCase("xxx", "a", -1, 20));
assertEquals(-1, StringUtil.indexOfIgnoreCase("xxx", "a", 0, 20));
assertEquals(-1, StringUtil.indexOfIgnoreCase("xxx", "a", 10, 20));
assertEquals(-1, StringUtil.indexOfIgnoreCase("xxx", 'a', -1, 20));
assertEquals(-1, StringUtil.indexOfIgnoreCase("xxx", 'a', 0, 20));
assertEquals(-1, StringUtil.indexOfIgnoreCase("xxx", 'a', 10, 20));
assertEquals(-1, StringUtil.lastIndexOf("xxx", "a", 20, 0));
assertEquals(-1, StringUtil.lastIndexOf("xxx", "a", 3, -1));
assertEquals(-1, StringUtil.lastIndexOf("xxx", "a", -5, -10));
assertEquals(-1, StringUtil.lastIndexOf("xxx", 'a', 20, 0));
assertEquals(-1, StringUtil.lastIndexOf("xxx", 'a', 3, -1));
assertEquals(-1, StringUtil.lastIndexOf("xxx", 'a', -5, -10));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase("xxx", "a", 20, 0));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase("xxx", "a", 3, -1));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase("xxx", "a", -5, -10));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase("xxx", 'a', 20, 0));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase("xxx", 'a', 3, -1));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase("xxx", 'a', -5, -10));
// empty
assertEquals(0, StringUtil.indexOf("xxx", "", -1, 3));
assertEquals(0, StringUtil.indexOf("xxx", "", 0, 3));
assertEquals(1, StringUtil.indexOf("xxx", "", 1, 3));
assertEquals(2, StringUtil.indexOf("xxx", "", 2, 3));
assertEquals(3, StringUtil.indexOf("xxx", "", 3, 30));
assertEquals(3, StringUtil.indexOf("xxx", "", 4, 30));
assertEquals(0, StringUtil.indexOfIgnoreCase("xxx", "", -1, 3));
assertEquals(0, StringUtil.indexOfIgnoreCase("xxx", "", 0, 3));
assertEquals(1, StringUtil.indexOfIgnoreCase("xxx", "", 1, 3));
assertEquals(2, StringUtil.indexOfIgnoreCase("xxx", "", 2, 3));
assertEquals(3, StringUtil.indexOfIgnoreCase("xxx", "", 3, 30));
assertEquals(3, StringUtil.indexOfIgnoreCase("xxx", "", 4, 30));
assertEquals(3, StringUtil.lastIndexOf("xxx", "", 10, -1));
assertEquals(3, StringUtil.lastIndexOf("xxx", "", 3, -1));
assertEquals(2, StringUtil.lastIndexOf("xxx", "", 2, -1));
assertEquals(1, StringUtil.lastIndexOf("xxx", "", 1, -1));
assertEquals(0, StringUtil.lastIndexOf("xxx", "", 0, -1));
assertEquals(-1, StringUtil.lastIndexOf("xxx", "", -1, -10));
assertEquals(-1, StringUtil.lastIndexOf("xxx", "", -10, -20));
assertEquals(3, StringUtil.lastIndexOfIgnoreCase("xxx", "", 10, -1));
assertEquals(3, StringUtil.lastIndexOfIgnoreCase("xxx", "", 3, -1));
assertEquals(2, StringUtil.lastIndexOfIgnoreCase("xxx", "", 2, -1));
assertEquals(1, StringUtil.lastIndexOfIgnoreCase("xxx", "", 1, -1));
assertEquals(0, StringUtil.lastIndexOfIgnoreCase("xxx", "", 0, -1));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase("xxx", "", -1, -10));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase("xxx", "", -10, -20));
}
@Test
public void testRemove() {
String s = "qwertyq";
assertEquals("qwertyq", StringUtil.remove(s, "W"));
assertEquals("qertyq", StringUtil.remove(s, "w"));
assertEquals("", StringUtil.remove(s, "qwertyq"));
assertEquals("qwertyq", StringUtil.remove(s, ""));
assertEquals("werty", StringUtil.remove(s, "q"));
assertEquals("qq", StringUtil.remove(s, "werty"));
assertEquals("werty", StringUtil.removeChars(s, "q"));
assertEquals("werty", StringUtil.remove(s, 'q'));
assertEquals(s, StringUtil.remove(s, 'x'));
assertEquals("qeryq", StringUtil.removeChars(s, "wt"));
assertEquals("qeryq", StringUtil.removeChars(s, new char[]{'w', 't'}));
assertEquals("", StringUtil.removeChars(s, "qwerty".toCharArray()));
assertEquals("", StringUtil.removeChars(s, "qwerty"));
}
@Test
public void testArrays() {
String s = "qwertyuiop";
assertEquals("qWERtyuIOp", StringUtil.replace(s, new String[]{"wer", "io"}, new String[]{"WER", "IO"}));
assertEquals("qwertyuiop", StringUtil.replace(s, new String[]{"wer1", "io1"}, new String[]{"WER", "IO"}));
assertEquals("qWERtyuIOP", StringUtil.replace(s, new String[] {"wer", "iop"}, new String[] {"WER", "IOP"}));
assertEquals("qWERtyuIOP", StringUtil.replaceIgnoreCase(s, new String[] {"WER", "IOP"}, new String[] {"WER", "IOP"}));
assertEquals(s, StringUtil.replaceIgnoreCase(s, new String[] {"WER", "IOP"}, new String[] {"WER"}));
assertEquals(s, StringUtil.replaceIgnoreCase(s, new String[] {}, new String[] {"WER"}));
assertEquals("qwertyuiop", StringUtil.replace(s, new String[] {}, new String[] {}));
assertEquals("qWERtyuiop", StringUtil.replace(s, new String[] {"wer", "we"}, new String[] {"WER", "11"}));
assertTrue(StringUtil.equals(new String[] {"wer", "io"}, new String[] {"wer", "io"}));
assertFalse(StringUtil.equals(new String[] {"wer", "io"}, new String[] {"WER", "IO"}));
assertTrue(StringUtil.equalsIgnoreCase(new String[] {"wer", "io"}, new String[] {"WER", "IO"}));
assertEquals(1, StringUtil.indexOf(s, new String[]{"wer", "io"})[1]);
assertEquals(7, StringUtil.indexOfIgnoreCase(s, new String[]{"wer", "IO"}, 2)[1]);
assertEquals(7, StringUtil.lastIndexOf(s, new String[]{"wer", "io"})[1]);
assertEquals(1, StringUtil.lastIndexOfIgnoreCase(s, new String[]{"WER", "io"}, 5)[1]);
}
@Test
public void testRanges() {
String s = "qwertyiop";
assertEquals(1, StringUtil.indexOf(s, "wer", 0, 5));
assertEquals(1, StringUtil.indexOf(s, 'w', 0, 5));
assertEquals(1, StringUtil.indexOf(s, "wer", 1, 5));
assertEquals(1, StringUtil.indexOf(s, 'w', 1, 5));
assertEquals(-1, StringUtil.indexOf(s, "wer", 2, 5));
assertEquals(-1, StringUtil.indexOf(s, 'w', 2, 5));
assertEquals(1, s.indexOf("wer"));
assertEquals(1, s.indexOf("wer", 1));
assertEquals(-1, s.indexOf("wer", 2));
assertEquals(1, StringUtil.indexOf(s, "wer", 1, 4));
assertEquals(1, StringUtil.indexOf(s, 'w', 1, 4));
assertEquals(-1, StringUtil.indexOf(s, "wer", 1, 3));
assertEquals(1, StringUtil.indexOf(s, 'w', 1, 3));
assertEquals(-1, StringUtil.indexOf(s, "wer", 0, 3));
assertEquals(1, StringUtil.indexOf(s, 'w', 0, 3));
assertEquals('r', s.charAt(3));
assertEquals(6, StringUtil.indexOf(s, "iop", 0, s.length()));
assertEquals(6, StringUtil.indexOf(s, 'i', 0, s.length()));
assertEquals(6, StringUtil.indexOf(s, "iop", 6, s.length()));
assertEquals(6, StringUtil.indexOf(s, 'i', 6, s.length()));
assertEquals(-1, StringUtil.indexOf(s, "iop", 0, s.length() - 1));
assertEquals(6, StringUtil.indexOf(s, 'i', 0, s.length() - 1));
assertEquals(-1, StringUtil.indexOf(s, "iop", 7, s.length()));
assertEquals(-1, StringUtil.indexOf(s, 'i', 7, s.length()));
assertEquals(6, s.indexOf("iop", 0));
assertEquals(6, s.indexOf("iop", 6));
assertEquals(-1, s.indexOf("iop", 7));
assertEquals(1, StringUtil.indexOfIgnoreCase(s, "wEr", 0, 5));
assertEquals(1, StringUtil.indexOfIgnoreCase(s, "wEr", 1, 5));
assertEquals(-1, StringUtil.indexOfIgnoreCase(s, "wEr", 2, 5));
assertEquals(1, StringUtil.indexOfIgnoreCase(s, "wEr", 1, 4));
assertEquals(-1, StringUtil.indexOfIgnoreCase(s, "wEr", 0, 3));
assertEquals(6, StringUtil.indexOfIgnoreCase(s, "iOp", 0, s.length()));
assertEquals(6, StringUtil.indexOfIgnoreCase(s, "iOp", 6, s.length()));
assertEquals(-1, StringUtil.indexOfIgnoreCase(s, "iOp", 0, s.length() - 1));
assertEquals(-1, StringUtil.indexOfIgnoreCase(s, "iOp", 7, s.length()));
assertEquals(1, StringUtil.lastIndexOfIgnoreCase(s, "wEr", 5, 0));
assertEquals(1, StringUtil.lastIndexOfIgnoreCase(s, "wEr", 5, 1));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase(s, "wEr", 5, 2));
assertEquals(1, StringUtil.lastIndexOf(s, "wer", 5, 0));
assertEquals(1, StringUtil.lastIndexOf(s, 'w', 5, 0));
assertEquals(1, StringUtil.lastIndexOf(s, "wer", 5, 1));
assertEquals(1, StringUtil.lastIndexOf(s, 'w', 5, 1));
assertEquals(-1, StringUtil.lastIndexOf(s, "wer", 5, 2));
assertEquals(-1, StringUtil.lastIndexOf(s, 'w', 5, 2));
assertEquals('w', s.charAt(1));
assertEquals(1, s.lastIndexOf("wer", 4));
assertEquals(1, s.lastIndexOf("wer", 3));
assertEquals(1, s.lastIndexOf("wer", 2));
assertEquals(1, s.lastIndexOf("wer", 1));
assertEquals(-1, s.lastIndexOf("wer", 0));
assertEquals(1, StringUtil.lastIndexOfIgnoreCase(s, "wEr", 4));
assertEquals(1, StringUtil.lastIndexOfIgnoreCase(s, "wEr", 3));
assertEquals(1, StringUtil.lastIndexOfIgnoreCase(s, "wEr", 2));
assertEquals(1, StringUtil.lastIndexOfIgnoreCase(s, "wEr", 1));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase(s, "wEr", 0));
assertEquals(1, StringUtil.lastIndexOf(s, "wer", 4, 0));
assertEquals(1, StringUtil.lastIndexOf(s, 'w', 4, 0));
assertEquals(1, StringUtil.lastIndexOf(s, "wer", 3, 0));
assertEquals(1, StringUtil.lastIndexOf(s, 'w', 3, 0));
assertEquals(1, StringUtil.lastIndexOf(s, "wer", 2, 0));
assertEquals(1, StringUtil.lastIndexOf(s, 'w', 2, 0));
assertEquals(1, StringUtil.lastIndexOf(s, "wer", 1, 0));
assertEquals(1, StringUtil.lastIndexOf(s, 'w', 1, 0));
assertEquals(-1, StringUtil.lastIndexOf(s, "wer", 0, 0));
assertEquals(-1, StringUtil.lastIndexOf(s, 'w', 0, 0));
assertEquals(1, StringUtil.lastIndexOfIgnoreCase(s, "wEr", 4, 1));
assertEquals(1, StringUtil.lastIndexOfIgnoreCase(s, "wEr", 3, 1));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase(s, "wEr", 3, 2));
assertEquals(1, StringUtil.lastIndexOf(s, "wer", 4, 1));
assertEquals(1, StringUtil.lastIndexOf(s, 'w', 4, 1));
assertEquals(1, StringUtil.lastIndexOf(s, "wer", 3, 1));
assertEquals(1, StringUtil.lastIndexOf(s, 'w', 3, 1));
assertEquals(-1, StringUtil.lastIndexOf(s, "wer", 3, 2));
assertEquals(-1, StringUtil.lastIndexOf(s, 'w', 3, 2));
assertEquals(6, StringUtil.lastIndexOfIgnoreCase(s, "iOp", s.length(), 0));
assertEquals(6, StringUtil.lastIndexOf(s, "iop", s.length() - 1, 0));
assertEquals(6, StringUtil.lastIndexOf(s, 'i', s.length() - 1, 0));
assertEquals(6, s.lastIndexOf("iop", s.length()));
assertEquals(6, StringUtil.lastIndexOfIgnoreCase(s, "iOp", s.length(), 6));
assertEquals(6, StringUtil.lastIndexOf(s, "iop", s.length() - 1, 6));
assertEquals(6, StringUtil.lastIndexOf(s, 'i', s.length() - 1, 6));
assertEquals(6, StringUtil.lastIndexOfIgnoreCase(s, "iOp", s.length() - 1, 0));
assertEquals(6, StringUtil.lastIndexOf(s, "iop", s.length() - 1, 0));
assertEquals(6, StringUtil.lastIndexOf(s, 'i', s.length() - 1, 0));
assertEquals(6, s.lastIndexOf("iop", s.length() - 1));
assertEquals(-1, StringUtil.lastIndexOfIgnoreCase(s, "iOp", s.length(), 7));
assertEquals(-1, StringUtil.lastIndexOf(s, "iop", s.length() - 1, 7));
assertEquals(-1, StringUtil.lastIndexOf(s, 'i', s.length() - 1, 7));
assertEquals(0, StringUtil.indexOf(s, "", 0, 5));
assertEquals(1, StringUtil.indexOf(s, "", 1, 5));
assertEquals(0, s.indexOf("", 0));
assertEquals(1, s.indexOf("", 1));
assertEquals(4, StringUtil.lastIndexOf(s, "", 4, 0));
assertEquals(-1, StringUtil.indexOfWhitespace("123"));
assertEquals(0, StringUtil.indexOfNonWhitespace("123"));
assertEquals(-1, StringUtil.indexOfWhitespace(""));
assertEquals(-1, StringUtil.indexOfNonWhitespace(""));
assertEquals(2, StringUtil.indexOfWhitespace("12 123"));
assertEquals(2, StringUtil.indexOfNonWhitespace(" 12 123"));
assertEquals(5, StringUtil.indexOfNonWhitespace(" 12 123", 4));
assertEquals(0, StringUtil.indexOfNonWhitespace("12 123"));
assertEquals(2, StringUtil.lastIndexOfWhitespace("12 123"));
assertEquals(5, StringUtil.indexOfWhitespace("12 12 3", 4));
assertEquals(2, StringUtil.lastIndexOfWhitespace("12 12 3", 4));
assertEquals(-1, StringUtil.lastIndexOfWhitespace("12 12 3", 4, 3));
assertEquals(6, StringUtil.lastIndexOfNonWhitespace("12 12 3"));
assertEquals(4, StringUtil.lastIndexOfNonWhitespace("12 12 "));
assertEquals(-1, StringUtil.lastIndexOfNonWhitespace(" "));
assertEquals(6, StringUtil.lastIndexOfNonWhitespace("12 12 3", 9));
assertEquals(4, StringUtil.lastIndexOfNonWhitespace("12 12 ", 6, 3));
assertEquals(4, StringUtil.lastIndexOfNonWhitespace("12 12 ", 6, 4));
assertEquals(-1, StringUtil.lastIndexOfWhitespace("", 4));
assertEquals(2, StringUtil.lastIndexOfWhitespace("12 12 ", 4, -1));
assertEquals(-1, StringUtil.lastIndexOfNonWhitespace("", 4));
assertEquals(4, StringUtil.lastIndexOfNonWhitespace("12 12 ", 4, -1));
}
@Test
public void testEscapeQuotes() {
String s = "ccc'aaa";
assertEquals("ccc\\'aaa", StringUtil.replace(s, "'", "\\'"));
s = "ccc\"aaa";
assertEquals("ccc\\\"aaa", StringUtil.replace(s, "\"", "\\\""));
}
@Test
public void testTrim() {
assertEquals("123", StringUtil.trimDown(" 123 "));
assertEquals("123", StringUtil.trimDown("123"));
assertNull(StringUtil.trimDown(""));
assertNull(StringUtil.trimDown(" "));
String[] strings = new String[]{" aa ", "\ra\t", null, " "};
StringUtil.trimAll(strings);
assertEquals("aa", strings[0]);
assertEquals("a", strings[1]);
assertNull(strings[2]);
assertEquals("", strings[3]);
strings = new String[]{" aa ", "\ra\t", null, " "};
StringUtil.trimDownAll(strings);
assertEquals("aa", strings[0]);
assertEquals("a", strings[1]);
assertNull(strings[2]);
assertNull(strings[3]);
String s = " \t123\t ";
assertEquals("123\t ", StringUtil.trimLeft(s));
assertEquals(" \t123", StringUtil.trimRight(s));
}
void checkInts(int x, int y, int z, int w, int[] arr) {
assertNotNull(arr);
assertEquals("1.arg", x, arr[0]);
assertEquals("2.arg", y, arr[1]);
assertEquals("3.arg", z, arr[2]);
assertEquals("4.arg", w, arr[3]);
}
@Test
public void testRegion() {
String string = "qwertyuiop";
assertNull(StringUtil.indexOfRegion(string, "x", "e"));
int[] res;
res = StringUtil.indexOfRegion(string, "q", "e");
checkInts(0, 1, 2, 3, res);
assertEquals("w", string.substring(res[1], res[2]));
res = StringUtil.indexOfRegion(string, "qw", "e");
checkInts(0, 2, 2, 3, res);
assertEquals("", string.substring(res[1], res[2]));
res = StringUtil.indexOfRegion(string, "qwe", "e");
assertNull(res);
res = StringUtil.indexOfRegion(string, "qwe", "ui");
checkInts(0, 3, 6, 8, res);
assertEquals("rty", string.substring(res[1], res[2]));
string = "aa\\${fo${o\\}foo}dd";
res = StringUtil.indexOfRegion(string, "${", "}", '\\');
checkInts(7, 9, 15, 16, res);
assertEquals("o\\}foo", string.substring(res[1], res[2]));
string = "xx${123}www";
res = StringUtil.indexOfRegion(string, "${", "}", '\\');
checkInts(2, 4, 7, 8, res);
res = StringUtil.indexOfRegion(string, "${", "}", '\\', -10);
checkInts(2, 4, 7, 8, res);
res = StringUtil.indexOfRegion(string, "${", "}", '\\', 3);
assertNull(res);
res = StringUtil.indexOfRegion(string, "${", "}", '\\', 100);
assertNull(res);
string = "xx${123www";
res = StringUtil.indexOfRegion(string, "${", "}", '\\');
assertNull(res);
string = "xx${123}ww";
res = StringUtil.indexOfRegion(string, "${", "}", '\\');
checkInts(2, 4, 7, 8, res);
string = "xx\\${123}ww";
res = StringUtil.indexOfRegion(string, "${", "}", '\\');
assertNull(res);
string = "xx\\\\${123}ww";
res = StringUtil.indexOfRegion(string, "${", "}", '\\');
assertNotNull(res);
checkInts(3, 6, 9, 10, res);
assertEquals("\\${", string.substring(res[0], res[1]));
assertEquals("123", string.substring(res[1], res[2]));
assertEquals("}", string.substring(res[2], res[3]));
string = "xx\\\\\\${123}ww";
res = StringUtil.indexOfRegion(string, "${", "}", '\\');
assertNotNull(res);
checkInts(4, 7, 10, 11, res);
assertEquals("\\${", string.substring(res[0], res[1]));
assertEquals("123", string.substring(res[1], res[2]));
assertEquals("}", string.substring(res[2], res[3]));
}
@Test
public void testReplaceChar() {
String s = "1234567890";
assertEquals("x234567890", StringUtil.replaceChar(s, '1', 'x'));
assertEquals("x2yz567890", StringUtil.replaceChars(s, new char[] {'1', '3', '4'}, new char[] {'x', 'y', 'z'}));
assertEquals(s, StringUtil.replaceChar(s, 'x', 'x'));
}
@Test
public void testSurround() {
assertEquals("preqwesuf", StringUtil.surround("qwe", "pre", "suf"));
assertEquals("preqwesuf", StringUtil.surround("preqwe", "pre", "suf"));
assertEquals("preqwesuf", StringUtil.surround("qwesuf", "pre", "suf"));
assertEquals("preqwesuf", StringUtil.surround("preqwesuf", "pre", "suf"));
assertEquals("fixqwefix", StringUtil.surround("qwe", "fix"));
assertEquals("preqwe", StringUtil.prefix("qwe", "pre"));
assertEquals("preqwe", StringUtil.prefix("preqwe", "pre"));
assertEquals("qwesuf", StringUtil.suffix("qwe", "suf"));
assertEquals("qwesuf", StringUtil.suffix("qwesuf", "suf"));
}
@Test
public void testCuts() {
assertEquals("1", StringUtil.cutToIndexOf("123", "2"));
assertEquals("1", StringUtil.cutToIndexOf("123", '2'));
assertEquals("123", StringUtil.cutToIndexOf("123", "4"));
assertEquals("123", StringUtil.cutToIndexOf("123", '4'));
assertEquals("", StringUtil.cutToIndexOf("123", "1"));
assertEquals("23", StringUtil.cutFromIndexOf("123", "2"));
assertEquals("23", StringUtil.cutFromIndexOf("123", '2'));
assertEquals("3", StringUtil.cutFromIndexOf("123", "3"));
assertEquals("3", StringUtil.cutFromIndexOf("123", '3'));
assertEquals("123", StringUtil.cutFromIndexOf("123", "4"));
assertEquals("123", StringUtil.cutFromIndexOf("123", '4'));
assertEquals("123", StringUtil.cutFromIndexOf("123", "1"));
assertEquals("qwe", StringUtil.cutPrefix("preqwe", "pre"));
assertEquals("preqwe", StringUtil.cutPrefix("preqwe", "pre2"));
assertEquals("qwe", StringUtil.cutSuffix("qwesuf", "suf"));
assertEquals("qwesuf", StringUtil.cutPrefix("qwesuf", "suf2"));
assertEquals("qwe", StringUtil.cutSurrounding("preqwesuf", "pre", "suf"));
assertEquals("qwe", StringUtil.cutSurrounding("qwesuf", "pre", "suf"));
assertEquals("qwe", StringUtil.cutSurrounding("preqwe", "pre", "suf"));
assertEquals("qwe", StringUtil.cutSurrounding("qwe", "pre", "suf"));
assertEquals("qwe", StringUtil.cutSurrounding("preqwepre", "pre"));
}
@Test
public void testCount() {
String s = "qwertywer";
assertEquals(0, StringUtil.count(s, "xxx"));
assertEquals(0, StringUtil.count(s, ""));
assertEquals(1, StringUtil.count(s, "qwe"));
assertEquals(0, StringUtil.count(s, "qwe", 1));
assertEquals(0, StringUtil.count(s, "qwe", 50));
assertEquals(1, StringUtil.count(s, "qwe", -1));
assertEquals(1, StringUtil.count(s, "qwertywer"));
assertEquals(2, StringUtil.count(s, "we"));
assertEquals(0, StringUtil.count(s, '0'));
assertEquals(1, StringUtil.count(s, 'q'));
assertEquals(2, StringUtil.count(s, 'w'));
assertEquals(0, StringUtil.countIgnoreCase(s, "xxx"));
assertEquals(0, StringUtil.countIgnoreCase(s, ""));
assertEquals(1, StringUtil.countIgnoreCase(s, "qwe"));
assertEquals(1, StringUtil.countIgnoreCase(s, "qwertywer"));
assertEquals(2, StringUtil.countIgnoreCase(s, "we"));
}
@Test
public void testIndexOfChars() {
String s = "12345qwerty";
assertEquals(0, StringUtil.indexOfChars(s, "1q"));
assertEquals(0, StringUtil.indexOfChars(s, "1q", 0));
assertEquals(5, StringUtil.indexOfChars(s, "1q", 1));
assertEquals(0, StringUtil.indexOfChars(s, "1q", -11));
assertEquals(-1, StringUtil.indexOfChars(s, "1q", 200));
assertEquals(1, StringUtil.indexOfChars(s, "q2"));
assertEquals(5, StringUtil.indexOfChars(s, "yq"));
assertEquals(5, StringUtil.indexOfChars(s, new char[] {'y', 'q'}));
assertEquals(-1, StringUtil.indexOfChars(s, new char[] {'x', 'o'}));
}
@Test
public void testEquals() {
assertTrue(StringUtil.equals("1", "1"));
assertFalse(StringUtil.equals("1", null));
assertFalse(StringUtil.equals(null, "2"));
assertTrue(StringUtil.equals((String) null, null));
assertFalse(StringUtil.equals(new String[] {"abc", "de"}, new String[] {"abc"}));
assertFalse(StringUtil.equalsIgnoreCase(new String[] {"abc", "de"}, new String[] {"ABC"}));
assertFalse(StringUtil.equalsIgnoreCase(new String[] {"abc", "de"}, new String[] {"ab", "dE"}));
assertEquals(2, StringUtil.equalsOne("src", new String[] {"123", null, "src"}));
assertEquals(-1, StringUtil.equalsOne("src", new String[] {"123", null, "Src"}));
assertEquals(2, StringUtil.equalsOneIgnoreCase("sRc", new String[] {"123", null, "Src"}));
assertEquals(-1, StringUtil.equalsOneIgnoreCase("sRc", new String[] {"123", null, "Dsrc"}));
}
@Test
public void testEmpty() {
assertFalse(StringUtil.isBlank("foo"));
assertTrue(StringUtil.isNotBlank("foo"));
assertTrue(StringUtil.isBlank(""));
assertFalse(StringUtil.isNotBlank(""));
assertTrue(StringUtil.isBlank(" "));
assertFalse(StringUtil.isNotBlank(" "));
assertTrue(StringUtil.isBlank(" \t \t"));
assertFalse(StringUtil.isNotBlank(" \t \t"));
assertTrue(StringUtil.isBlank(null));
assertFalse(StringUtil.isNotBlank(null));
assertFalse(StringUtil.isEmpty("foo"));
assertTrue(StringUtil.isNotEmpty("foo"));
assertTrue(StringUtil.isEmpty(""));
assertFalse(StringUtil.isNotEmpty(""));
assertFalse(StringUtil.isEmpty(" "));
assertTrue(StringUtil.isNotEmpty(" "));
assertFalse(StringUtil.isEmpty(" \t \t"));
assertTrue(StringUtil.isNotEmpty(" \t \t"));
assertTrue(StringUtil.isEmpty(null));
assertFalse(StringUtil.isNotEmpty(null));
assertTrue(StringUtil.isAllEmpty("", null));
assertFalse(StringUtil.isAllEmpty("", null, "a"));
assertTrue(StringUtil.isAllBlank("", " ", "\t", "\r", null));
assertFalse(StringUtil.isAllBlank("", " ", "\t", "\ra", null));
}
@Test
public void testToString() {
assertEquals("aaa", StringUtil.toString("aaa"));
assertEquals("173", StringUtil.toString(Integer.valueOf(173)));
assertNull(StringUtil.toString(null));
assertEquals("", StringUtil.toSafeString(null));
assertEquals("3", StringUtil.toSafeString(Long.valueOf(3)));
}
@Test
public void testToPrettyString() {
assertEquals(StringPool.NULL, StringUtil.toPrettyString(null));
assertEquals("[A,B]", StringUtil.toPrettyString(new String[]{"A", "B"}));
assertEquals("[1,2]", StringUtil.toPrettyString(new int[]{1,2}));
assertEquals("[1,2]", StringUtil.toPrettyString(new long[]{1,2}));
assertEquals("[1,2]", StringUtil.toPrettyString(new short[]{1,2}));
assertEquals("[1,2]", StringUtil.toPrettyString(new byte[]{1,2}));
assertEquals("[1.0,2.0]", StringUtil.toPrettyString(new double[]{1,2}));
assertEquals("[1.0,2.0]", StringUtil.toPrettyString(new float[]{1,2}));
assertEquals("[true,false]", StringUtil.toPrettyString(new boolean[] {true, false}));
try {
StringUtil.toPrettyString(new char[]{'a','b'});
fail();
} catch (IllegalArgumentException e) {
// ignore
}
assertEquals("[[1,2],[3,4]]", StringUtil.toPrettyString(new int[][] {{1, 2}, {3, 4}}));
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(4);
assertEquals("{1,4}", StringUtil.toPrettyString(list));
}
@Test
public void testCapitalize() {
assertEquals("F", StringUtil.capitalize("f"));
assertEquals("Foo", StringUtil.capitalize("foo"));
assertEquals("Foo", StringUtil.capitalize("Foo"));
assertEquals("", StringUtil.capitalize(""));
assertEquals("f", StringUtil.uncapitalize("F"));
assertEquals("foo", StringUtil.uncapitalize("foo"));
assertEquals("foo", StringUtil.uncapitalize("Foo"));
assertEquals("uRL", StringUtil.uncapitalize("URL"));
assertEquals("", StringUtil.uncapitalize(""));
assertEquals("f", StringUtil.decapitalize("F"));
assertEquals("foo", StringUtil.decapitalize("foo"));
assertEquals("foo", StringUtil.decapitalize("Foo"));
assertEquals("URL", StringUtil.decapitalize("URL"));
assertEquals("", StringUtil.decapitalize(""));
}
@Test
public void testTruncate() {
assertEquals("fo", StringUtil.truncate("foo", 2));
assertEquals("f", StringUtil.truncate("foo", 1));
assertEquals("", StringUtil.truncate("foo", 0));
assertEquals("foo", StringUtil.truncate("foo", 4));
}
@Test
public void testStartWith() {
assertTrue(StringUtil.startsWithChar("asd", 'a'));
assertFalse(StringUtil.startsWithChar("asd", 's'));
assertFalse(StringUtil.startsWithChar("", 'a'));
assertTrue(StringUtil.endsWithChar("asd", 'd'));
assertFalse(StringUtil.endsWithChar("asd", 's'));
assertFalse(StringUtil.endsWithChar("", 'd'));
assertEquals(3, StringUtil.startsWithOne("qwe123", new String[]{"Qwe", null, ".", "qwe"}));
assertEquals(-1, StringUtil.startsWithOne("qwe123", new String[]{"Qwe", null, ".", "we"}));
assertEquals(0, StringUtil.startsWithOneIgnoreCase("qwe123", new String[]{"Qwe", null, ".", "qwe"}));
assertEquals(-1, StringUtil.startsWithOneIgnoreCase("qwe123", new String[]{"we", null, ".", "we"}));
assertEquals(3, StringUtil.endsWithOne("qwezxc", new String[] {"Zxc", null, ".", "zxc"}));
assertEquals(-1, StringUtil.endsWithOne("qwezxc", new String[] {"Zxc", null, ".", "zx"}));
assertEquals(0, StringUtil.endsWithOneIgnoreCase("qweZXC", new String[] {"Zxc", null, ".", "zxc"}));
assertEquals(-1, StringUtil.endsWithOneIgnoreCase("qweZXC", new String[] {"zx", null, ".", "zx"}));
}
@Test
public void testStrip() {
assertEquals("we", StringUtil.stripLeadingChar("qwe", 'q'));
assertEquals("qwe", StringUtil.stripLeadingChar("qwe", '4'));
assertEquals("qw", StringUtil.stripTrailingChar("qwe", 'e'));
assertEquals("qwe", StringUtil.stripTrailingChar("qwe", '4'));
assertEquals("", StringUtil.stripChar("", '4'));
assertEquals("", StringUtil.stripChar("4", '4'));
assertEquals("2", StringUtil.stripChar("424", '4'));
assertEquals("23", StringUtil.stripChar("423", '4'));
assertEquals("23", StringUtil.stripChar("4234", '4'));
assertEquals("4", StringUtil.stripChar("4", '5'));
}
@Test
public void testCrop() {
assertEquals("123", StringUtil.crop("123"));
assertEquals(" ", StringUtil.crop(" "));
assertNull(StringUtil.crop(""));
String[] s = new String[]{" ", null, ""};
StringUtil.cropAll(s);
assertEquals(" ", s[0]);
assertNull(s[1]);
assertNull(s[2]);
}
@Test
public void testJoin() {
assertNull(StringUtil.join(null));
assertEquals(StringPool.EMPTY, StringUtil.join(new Object[] {}));
assertEquals("123", StringUtil.join(array("123")));
assertEquals("123", StringUtil.join(array("1", "2", "3")));
assertEquals("13", StringUtil.join(array("1", "", "3")));
assertEquals("1null3", StringUtil.join(array("1", null, "3")));
String s = StringUtil.join(array("1", "2", "3"), ".");
assertEquals("1.2.3", s);
s = StringUtil.join(array("1", "2", "3"), '.');
assertEquals("1.2.3", s);
s = StringUtil.join(array("1"), '.');
assertEquals("1", s);
s = StringUtil.join(new String[0], ".");
assertEquals("", s);
assertNull(StringUtil.join(array(null), "."));
assertEquals(StringPool.EMPTY, StringUtil.join(new Object[] {}, "."));
assertEquals("123", StringUtil.join(new String[] { "123" }, "."));
assertNull(StringUtil.join(array(null), '.'));
assertEquals(StringPool.EMPTY, StringUtil.join(new Object[] {}, '.'));
assertEquals("123", StringUtil.join(new String[] { "123" }, '.'));
}
@Test
public void testCharset() {
assertEquals("123", StringUtil.convertCharset("123", UTF_8, UTF_8));
assertEquals("123", StringUtil.convertCharset("123", ISO_8859_1, UTF_8));
String s = StringUtil.convertCharset("\250\275", UTF_8, ISO_8859_1);
assertEquals(4, s.length());
assertEquals(194, s.charAt(0));
assertEquals(168, s.charAt(1));
assertEquals(194, s.charAt(2));
assertEquals(189, s.charAt(3));
try {
assertEquals("123", StringUtil.convertCharset("123", "yyy", "xxx"));
fail();
} catch (IllegalArgumentException e) {
// ignore
}
}
@Test
public void testIsCharAt() {
assertTrue(StringUtil.isCharAtEqual("123", 0, '1'));
assertTrue(StringUtil.isCharAtEqual("123", 1, '2'));
assertTrue(StringUtil.isCharAtEqual("123", 2, '3'));
assertFalse(StringUtil.isCharAtEqual("123", 0, '3'));
assertFalse(StringUtil.isCharAtEqual("123", -1, '3'));
assertFalse(StringUtil.isCharAtEqual("123", 5, '3'));
}
@Test
public void testEscape() {
assertFalse(StringUtil.isCharAtEscaped("1\\23", 1, '\\'));
assertTrue(StringUtil.isCharAtEscaped("1\\23", 2, '\\'));
assertFalse(StringUtil.isCharAtEscaped("1\\23", 3, '\\'));
assertFalse(StringUtil.isCharAtEscaped("1\\23", 0, '\\'));
assertEquals(4, StringUtil.indexOfUnescapedChar("1\\23244", '2', '\\'));
assertEquals(4, StringUtil.indexOfUnescapedChar("1\\23244", '2', '\\', -1));
assertEquals(-1, StringUtil.indexOfUnescapedChar("1\\23244", '2', '\\', 6));
assertEquals(-1, StringUtil.indexOfUnescapedChar("1\\23", '2', '\\'));
}
@Test
public void testRepeat() {
assertEquals("1212", StringUtil.repeat("12", 2));
assertEquals("xxxx", StringUtil.repeat('x', 4));
}
@Test
public void testReverse() {
assertEquals("12345", StringUtil.reverse("54321"));
}
@Test
public void testMaxCommonPrefix() {
assertEquals("", StringUtil.maxCommonPrefix("qwe", "asd"));
assertEquals("1", StringUtil.maxCommonPrefix("1qwe", "1asd"));
assertEquals("123", StringUtil.maxCommonPrefix("123", "123"));
assertEquals("123", StringUtil.maxCommonPrefix("123456", "123"));
}
@Test
public void testToCamelCase() {
assertEquals("oneTwoThree", StringUtil.toCamelCase("one two three", false, ' '));
assertEquals("OneTwo.Three", StringUtil.toCamelCase("one two. three", true, ' '));
assertEquals("OneTwoThree", StringUtil.toCamelCase("One-two-three", true, '-'));
assertEquals("userName", StringUtil.toCamelCase("user_name", false, '_'));
assertEquals("UserName", StringUtil.toCamelCase("user_name", true, '_'));
assertEquals("user", StringUtil.toCamelCase("user", false, '_'));
assertEquals("User", StringUtil.toCamelCase("user", true, '_'));
}
@Test
public void testFromCamelCase() {
assertEquals("one two three", StringUtil.fromCamelCase("oneTwoThree", ' '));
assertEquals("one-two-three", StringUtil.fromCamelCase("oneTwoThree", '-'));
assertEquals("one. two. three", StringUtil.fromCamelCase("one.Two.Three", ' '));
assertEquals("user_name", StringUtil.fromCamelCase("userName", '_'));
assertEquals("user_name", StringUtil.fromCamelCase("UserName", '_'));
assertEquals("user_name", StringUtil.fromCamelCase("USER_NAME", '_'));
assertEquals("user_name", StringUtil.fromCamelCase("user_name", '_'));
assertEquals("user", StringUtil.fromCamelCase("user", '_'));
assertEquals("user", StringUtil.fromCamelCase("User", '_'));
assertEquals("user", StringUtil.fromCamelCase("USER", '_'));
assertEquals("user", StringUtil.fromCamelCase("_user", '_'));
assertEquals("user", StringUtil.fromCamelCase("_User", '_'));
assertEquals("_user", StringUtil.fromCamelCase("__user", '_'));
assertEquals("user__name", StringUtil.fromCamelCase("user__name", '_'));
}
@Test
public void testJavaEscapes() {
String from = "\r\t\b\f\n\\\"asd\u0111q\u0173aa\u0ABC\u0abc";
String to = "\\r\\t\\b\\f\\n\\\\\\\"asd\\u0111q\\u0173aa\\u0abc\\u0abc";
assertEquals(to, StringUtil.escapeJava(from));
assertEquals(from, StringUtil.unescapeJava(to));
try {
StringUtil.unescapeJava("\\r\\t\\b\\f\\q");
fail();
} catch (IllegalArgumentException e) {
// ignore
}
}
@Test
public void testFindCommonPrefix() {
assertEquals("", StringUtil.findCommonPrefix("123", "234"));
assertEquals("123", StringUtil.findCommonPrefix("123"));
assertEquals("12", StringUtil.findCommonPrefix("123xxx", "125", "12xxxxx"));
assertEquals("1", StringUtil.findCommonPrefix("123xxx", "1", "12xxxxx"));
assertEquals("", StringUtil.findCommonPrefix("", "1", "12xxxxx"));
assertEquals("123", StringUtil.findCommonPrefix("123", "123", "123"));
}
@Test
public void testShorten() {
assertEquals("Long...", StringUtil.shorten("Long long sentence", 8, "..."));
assertEquals("Longl...", StringUtil.shorten("Longlong sentence", 8, "..."));
}
@Test
public void testCompressChars() {
assertEquals("1 2 3", StringUtil.compressChars("1 2 3", ' '));
assertEquals("1 2 3", StringUtil.compressChars("1 2 3", ' '));
}
@Test
public void testTitle() {
assertEquals("A New Day Is Born", StringUtil.title("a neW day IS born"));
}
@Test
public void testSubstring() {
assertEquals("2", StringUtil.substring("123", 1, 2));
assertEquals("23", StringUtil.substring("123", 1, 2000));
assertEquals("123", StringUtil.substring("123", -1000, 2000));
assertEquals("", StringUtil.substring("123", 1, 1));
assertEquals("2", StringUtil.substring("123", 1, -1));
assertEquals("", StringUtil.substring("123", 1, -2));
assertEquals("", StringUtil.substring("123", 2, -1));
assertEquals("2", StringUtil.substring("123", -2, -1));
assertEquals("23", StringUtil.substring("123", -2, 0));
assertEquals("AbCdE", StringUtil.substring("AbCdEf", 0, -1));
assertEquals("dEf", StringUtil.substring("AbCdEf", -3, 0));
assertEquals("dE", StringUtil.substring("AbCdEf", -3, -1));
assertEquals("AbCdE", StringUtil.substring("AbCdEf", -3000, -1));
assertEquals("", StringUtil.substring("AbCdEf", 1000, 2000));
}
@Test
public void testStripFromToChar() {
assertEquals("1", StringUtil.stripFromChar("1234", '2'));
assertEquals("", StringUtil.stripFromChar("1234", '1'));
assertEquals("1234", StringUtil.stripFromChar("1234", 'X'));
assertEquals("234", StringUtil.stripToChar("1234", '2'));
assertEquals("1234", StringUtil.stripToChar("1234", '1'));
assertEquals("1234", StringUtil.stripToChar("1234", 'X'));
}
@Test
public void testFormatPara() {
String txt = "123 567 90AB";
String p = StringUtil.formatParagraph(txt, 6, false);
assertEquals("123 56\n7 90AB\n", p);
p = StringUtil.formatParagraph(txt, 4, false);
assertEquals("123\n567\n90AB\n", p);
txt = "123 67 90AB";
p = StringUtil.formatParagraph(txt, 4, false);
assertEquals("123\n67\n90AB\n", p);
txt = "123 567 90AB";
p = StringUtil.formatParagraph(txt, 6, true);
assertEquals("123\n567\n90AB\n", p);
txt = "123 67 90AB";
p = StringUtil.formatParagraph(txt, 4, true);
assertEquals("123\n67\n90AB\n", p);
txt = "123 67 90ABCDE";
p = StringUtil.formatParagraph(txt, 4, true);
assertEquals("123\n67\n90AB\nCDE\n", p);
txt = "1234567";
p = StringUtil.formatParagraph(txt, 4, true);
assertEquals("1234\n567\n", p);
p = StringUtil.formatParagraph(txt, 4, false);
assertEquals("1234\n567\n", p);
}
@Test
public void testTabsToSpaces() {
String s = StringUtil.convertTabsToSpaces("q\tqa\t", 3);
assertEquals("q qa ", s);
s = StringUtil.convertTabsToSpaces("q\tqa\t", 0);
assertEquals("qqa", s);
}
@Test
public void testContainsOnly() {
assertTrue(StringUtil.containsOnlyWhitespaces(" "));
assertFalse(StringUtil.containsOnlyWhitespaces("12345"));
assertTrue(StringUtil.containsOnlyDigits("12345"));
assertFalse(StringUtil.containsOnlyDigits("12345a"));
assertTrue(StringUtil.containsOnlyDigitsAndSigns("+12345"));
assertFalse(StringUtil.containsOnlyDigitsAndSigns("-12345a"));
}
@Test
public void testToStringArray() {
assertArrayEquals(new String[0], StringUtil.toStringArray(null));
assertArrayEquals(new String[]{"abc"}, StringUtil.toStringArray("abc"));
assertArrayEquals(new String[]{"ab", "cd"}, StringUtil.toStringArray(new String[]{"ab", "cd"}));
assertArrayEquals(new String[]{"1","2"}, StringUtil.toStringArray(new int[]{1,2}));
assertArrayEquals(new String[] {"1", "2"}, StringUtil.toStringArray(new long[] {1, 2}));
assertArrayEquals(new String[] {"1", "2"}, StringUtil.toStringArray(new short[] {1, 2}));
assertArrayEquals(new String[] {"1", "2"}, StringUtil.toStringArray(new byte[] {1, 2}));
assertArrayEquals(new String[] {"1.0", "2.0"}, StringUtil.toStringArray(new double[] {1, 2}));
assertArrayEquals(new String[] {"1.0", "2.0"}, StringUtil.toStringArray(new float[] {1, 2}));
assertArrayEquals(new String[] {"true", "false"}, StringUtil.toStringArray(new boolean[] {true, false}));
try {
StringUtil.toStringArray(new char[]{'a','b'});
fail();
} catch (IllegalArgumentException e) {
// ignore
}
}
@Test
public void testInsert() {
assertEquals("abcd12345", StringUtil.insert("12345", "abcd"));
assertEquals("abcd12345", StringUtil.insert("12345", "abcd", -1));
assertEquals("12345abcd", StringUtil.insert("12345", "abcd", 6));
assertEquals("12abcd345", StringUtil.insert("12345", "abcd", 2));
}
@Test
public void testToLowerCase() {
assertNull(StringUtil.toLowerCase(null));
assertEquals("abcd", StringUtil.toLowerCase("abCD"));
assertEquals("abcdčđž", StringUtil.toLowerCase("abCDČđŽ"));
assertEquals("abcdčđž", StringUtil.toLowerCase("abCDČđŽ", Locale.US));
assertEquals("*-+", StringUtil.toLowerCase("*-+"));
}
@Test
public void testToUpperCase() {
assertNull(StringUtil.toUpperCase(null));
assertEquals("ABCD", StringUtil.toUpperCase("abCD"));
assertEquals("ABCDČĐŽ", StringUtil.toUpperCase("abCDČđŽ"));
assertEquals("ABCDČĐŽ", StringUtil.toUpperCase("abCDČđŽ", Locale.US));
assertEquals("*-+", StringUtil.toUpperCase("*-+"));
}
@Test
public void testToHexString() {
assertEquals("3F", StringUtil.toHexString(new byte[] {0x3F}));
assertEquals("CAFEBABE", StringUtil.toHexString(new byte[] {(byte) 0xCA, (byte) 0xFE, (byte) 0xBA, (byte) 0xBE}));
}
@Test
public void testCutBetween() {
assertEquals("45", StringUtil.cutBetween("123456", "23", "6"));
assertEquals("", StringUtil.cutBetween("123456", "234", "456"));
assertEquals("", StringUtil.cutBetween("123456", "2345", "456"));
assertNull(StringUtil.cutBetween("123456", "2345", "aa"));
assertNull(StringUtil.cutBetween("123456", "bbb", "34"));
}
@Test
public void testIsSubstringAt() {
assertTrue(StringUtil.isSubstringAt("qwerty", "we", 1));
assertTrue(StringUtil.isSubstringAt("qwerty", "qwe", 0));
assertTrue(StringUtil.isSubstringAt("qwerty", "qwerty", 0));
assertFalse(StringUtil.isSubstringAt("qwerty", "qwerty", 1));
assertFalse(StringUtil.isSubstringAt("qwerty", "y", 4));
assertTrue(StringUtil.isSubstringAt("qwerty", "y", 5));
assertTrue(StringUtil.isSubstringAt("qwerty", "", 5));
}
@Test
public void testRemoveQuotes() {
assertEquals("123", StringUtil.removeQuotes("123"));
assertEquals("'123", StringUtil.removeQuotes("'123"));
assertEquals("123", StringUtil.removeQuotes("'123'"));
assertEquals("123'", StringUtil.removeQuotes("123'"));
assertEquals("\"123", StringUtil.removeQuotes("\"123"));
assertEquals("123", StringUtil.removeQuotes("\"123\""));
assertEquals("123\"", StringUtil.removeQuotes("123\""));
assertEquals("'123\"", StringUtil.removeQuotes("'123\""));
assertEquals("\"123'", StringUtil.removeQuotes("\"123'"));
}
}