/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.citrus.util;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Formatter;
import org.junit.Test;
/**
* 测试<code>StringUtil</code>。
*
* @author Michael Zhou
*/
public class StringUtilTests {
// ==========================================================================
// 基本函数。
//
// 注:对于大小写敏感的isEquals方法,请使用ObjectUtil.isEquals。
// ==========================================================================
@Test
public void getLength() {
assertEquals(0, StringUtil.getLength(null));
assertEquals(1, StringUtil.getLength(" "));
assertEquals(3, StringUtil.getLength("abc"));
}
@Test
public void isEqualsIgnoreCase() {
assertTrue(StringUtil.isEqualsIgnoreCase(null, null));
assertFalse(StringUtil.isEqualsIgnoreCase(null, "abc"));
assertFalse(StringUtil.isEqualsIgnoreCase("abc", null));
assertTrue(StringUtil.isEqualsIgnoreCase("abc", "abc"));
assertTrue(StringUtil.isEqualsIgnoreCase("abc", "ABC"));
}
// ==========================================================================
// 判空函数。
//
// 以下方法用来判定一个字符串是否为:
// 1. null
// 2. empty - ""
// 3. blank - "全部是空白" - 空白由Character.isWhitespace所定义。
// ==========================================================================
@Test
public void isEmpty() {
assertTrue(StringUtil.isEmpty(null));
assertTrue(StringUtil.isEmpty(""));
assertFalse(StringUtil.isEmpty(" "));
assertFalse(StringUtil.isEmpty("bob"));
assertFalse(StringUtil.isEmpty(" bob "));
// Unicode空白
assertFalse(StringUtil.isEmpty("\u3000"));
assertFalse(StringUtil.isEmpty("\r\n"));
}
@Test
public void isBlank() {
assertTrue(StringUtil.isBlank(null));
assertTrue(StringUtil.isBlank(""));
assertTrue(StringUtil.isBlank(" "));
assertFalse(StringUtil.isBlank("bob"));
assertFalse(StringUtil.isBlank(" bob "));
// Unicode空白
assertTrue(StringUtil.isBlank("\u3000"));
assertTrue(StringUtil.isBlank("\r\n"));
}
// ==========================================================================
// 默认值函数。
//
// 当字符串为empty或blank时,将字符串转换成指定的默认字符串。
// 判断字符串为null时,可用更通用的ObjectUtil.defaultIfNull。
// ==========================================================================
@Test
public void defaultIfEmpty() {
assertEquals("default", StringUtil.defaultIfEmpty(null, "default"));
assertEquals("default", StringUtil.defaultIfEmpty("", "default"));
assertEquals(" ", StringUtil.defaultIfEmpty(" ", "default"));
assertEquals("bat", StringUtil.defaultIfEmpty("bat", "default"));
}
@Test
public void defaultIfBlank() {
assertEquals("default", StringUtil.defaultIfBlank(null, "default"));
assertEquals("default", StringUtil.defaultIfBlank("", "default"));
assertEquals("default", StringUtil.defaultIfBlank(" ", "default"));
assertEquals("bat", StringUtil.defaultIfBlank("bat", "default"));
}
// ==========================================================================
// 去空白的函数。
//
// 以下方法用来除去一个字串首尾的空白。
// ==========================================================================
@Test
public void trim() {
assertNull(StringUtil.trim(null));
assertEquals("", StringUtil.trim(""));
assertEquals("", StringUtil.trim(" "));
assertEquals("abc", StringUtil.trim("abc"));
assertEquals("abc", StringUtil.trim(" abc "));
}
@Test
public void trimToNull() {
String abc = "abc";
assertNull(StringUtil.trimToNull(null));
assertNull(StringUtil.trimToNull(""));
assertNull(StringUtil.trimToNull(" "));
assertSame(abc, StringUtil.trimToNull(abc)); // 字符串原样返回,确保效率
assertEquals("abc", StringUtil.trimToNull(" abc "));
}
@Test
public void trimToEmpty() {
String abc = "abc";
assertEquals("", StringUtil.trimToEmpty(null));
assertEquals("", StringUtil.trimToEmpty(""));
assertEquals("", StringUtil.trimToEmpty(" "));
assertSame(abc, StringUtil.trimToEmpty(abc)); // 字符串原样返回,确保效率
assertEquals("abc", StringUtil.trimToEmpty(" abc "));
}
@Test
public void trim_chars() {
String abc = "abc";
assertNull(StringUtil.trim(null, null));
assertEquals("", StringUtil.trim("", null));
assertEquals("", StringUtil.trim(" ", null));
assertSame(abc, StringUtil.trim(abc, null)); // 字符串原样返回,确保效率
assertEquals("abc", StringUtil.trim(" abc ", null));
// Unicode空白
assertEquals("abc", StringUtil.trim("\u3000abc\r\n", null));
// 两个参数
assertNull(StringUtil.trim(null, "xyz"));
assertEquals("", StringUtil.trim("", "xyz"));
assertEquals(abc, StringUtil.trim(abc, null));
assertEquals("abc", StringUtil.trim(" abc", null));
assertEquals("abc", StringUtil.trim("abc ", null));
assertEquals("abc", StringUtil.trim(" abc ", null));
assertEquals(" abc", StringUtil.trim(" abcyx", "xyz"));
assertEquals(" abcyx", StringUtil.trim(" abcyx", ""));
}
@Test
public void trimStart() {
String abc = "abc";
assertNull(StringUtil.trimStart(null));
assertEquals("", StringUtil.trimStart(""));
assertSame(abc, StringUtil.trimStart(abc));
assertEquals("abc", StringUtil.trimStart(" abc"));
assertEquals("abc ", StringUtil.trimStart("abc "));
assertEquals("abc ", StringUtil.trimStart(" abc "));
// Unicode空白
assertEquals("abc\u3000", StringUtil.trimStart("\u3000abc\u3000"));
// 两个参数
assertNull(StringUtil.trimStart(null, "xyz"));
assertEquals("", StringUtil.trimStart("", "xyz"));
assertEquals(abc, StringUtil.trimStart(abc, null));
assertEquals("abc", StringUtil.trimStart(" abc", null));
assertEquals("abc ", StringUtil.trimStart("abc ", null));
assertEquals("abc ", StringUtil.trimStart(" abc ", null));
assertEquals(" abc ", StringUtil.trimStart(" abc ", ""));
assertEquals("abcx", StringUtil.trimStart("xxabcx", "xyz"));
abc = " abcyx";
assertEquals(abc, StringUtil.trimStart(abc, "xyz"));
}
@Test
public void trimEnd() {
String abc = "abc";
assertNull(StringUtil.trimEnd(null));
assertEquals("", StringUtil.trimEnd(""));
assertSame(abc, StringUtil.trimEnd(abc));
assertEquals(" abc", StringUtil.trimEnd(" abc"));
assertEquals("abc", StringUtil.trimEnd("abc "));
assertEquals(" abc", StringUtil.trimEnd(" abc "));
// Unicode空白
assertEquals("\u3000abc", StringUtil.trimEnd("\u3000abc\u3000"));
// 两个参数
assertNull(StringUtil.trimEnd(null, "xyz"));
assertEquals("", StringUtil.trimEnd("", "xyz"));
assertEquals(abc, StringUtil.trimEnd(abc, null));
assertEquals(" abc", StringUtil.trimEnd(" abc", null));
assertEquals("abc", StringUtil.trimEnd("abc ", null));
assertEquals(" abc", StringUtil.trimEnd(" abc ", null));
assertEquals(" abc", StringUtil.trimEnd(" abcyx", "xyz"));
assertEquals(" abcyx", StringUtil.trimEnd(" abcyx", ""));
}
@Test
public void trimToNull_chars() {
String abc = "abc";
assertNull(StringUtil.trimToNull(null, null));
assertNull(StringUtil.trimToNull("", null));
assertNull(StringUtil.trimToNull(" ", null));
assertSame(abc, StringUtil.trimToNull(abc, null)); // 字符串原样返回,确保效率
assertEquals("abc", StringUtil.trimToNull(" abc ", null));
// Unicode空白
assertEquals("abc", StringUtil.trimToNull("\u3000abc\r\n", null));
// 两个参数
assertNull(StringUtil.trimToNull(null, "xyz"));
assertNull(StringUtil.trimToNull("", "xyz"));
assertEquals(abc, StringUtil.trimToNull(abc, null));
assertEquals("abc", StringUtil.trimToNull(" abc", null));
assertEquals("abc", StringUtil.trimToNull("abc ", null));
assertEquals("abc", StringUtil.trimToNull(" abc ", null));
assertEquals(" abc", StringUtil.trimToNull(" abcyx", "xyz"));
}
@Test
public void trimToEmpty_chars() {
String abc = "abc";
assertEquals("", StringUtil.trimToEmpty(null, null));
assertEquals("", StringUtil.trimToEmpty("", null));
assertEquals("", StringUtil.trimToEmpty(" ", null));
assertSame(abc, StringUtil.trimToEmpty(abc, null)); // 字符串原样返回,确保效率
assertEquals("abc", StringUtil.trimToEmpty(" abc ", null));
// Unicode空白
assertEquals("abc", StringUtil.trimToEmpty("\u3000abc\r\n", null));
// 两个参数
assertEquals("", StringUtil.trimToEmpty(null, "xyz"));
assertEquals("", StringUtil.trimToEmpty("", "xyz"));
assertEquals(abc, StringUtil.trimToEmpty(abc, null));
assertEquals("abc", StringUtil.trimToEmpty(" abc", null));
assertEquals("abc", StringUtil.trimToEmpty("abc ", null));
assertEquals("abc", StringUtil.trimToEmpty(" abc ", null));
assertEquals(" abc", StringUtil.trimToEmpty(" abcyx", "xyz"));
}
// ==========================================================================
// 大小写转换。
// ==========================================================================
@Test
public void capitalize() {
assertNull(StringUtil.capitalize(null));
assertEquals("", StringUtil.capitalize(""));
assertEquals("Cat", StringUtil.capitalize("cat"));
assertEquals("CAt", StringUtil.capitalize("cAt"));
}
@Test
public void uncapitalize() {
assertNull(StringUtil.uncapitalize(null));
assertEquals("", StringUtil.uncapitalize(""));
assertEquals("cat", StringUtil.uncapitalize("Cat"));
assertEquals("CAT", StringUtil.uncapitalize("CAT"));
}
@Test
public void swapCase() {
assertNull(StringUtil.swapCase(null));
assertEquals("", StringUtil.swapCase(""));
assertEquals("tHE DOG HAS A bone", StringUtil.swapCase("The dog has a BONE"));
char titleCaseChar = '\u01C5';
char lowerCaseChar = '\u01C6';
assertEquals(lowerCaseChar + "ABCdEF", StringUtil.swapCase(titleCaseChar + "abcDef"));
}
@Test
public void toUpperCase() {
assertNull(StringUtil.toUpperCase(null));
assertEquals("", StringUtil.toUpperCase(""));
assertEquals("ABC", StringUtil.toUpperCase("aBc"));
}
@Test
public void toLowerCase() {
assertNull(StringUtil.toLowerCase(null));
assertEquals("", StringUtil.toLowerCase(""));
assertEquals("abc", StringUtil.toLowerCase("aBc"));
}
@Test
public void toCamelCase() {
assertNull(StringUtil.toCamelCase(null));
assertEquals("", StringUtil.toCamelCase(""));
assertEquals("a", StringUtil.toCamelCase("A"));
assertEquals("a", StringUtil.toCamelCase("a"));
assertEquals("ab", StringUtil.toCamelCase("AB"));
assertEquals("ab", StringUtil.toCamelCase("Ab"));
assertEquals("aB", StringUtil.toCamelCase("aB"));
assertEquals("ab", StringUtil.toCamelCase("ab"));
assertEquals("aB", StringUtil.toCamelCase("A_B"));
assertEquals("aB", StringUtil.toCamelCase("A_b"));
assertEquals("aB", StringUtil.toCamelCase("a_B"));
assertEquals("aB", StringUtil.toCamelCase("a_b"));
assertEquals("aBc", StringUtil.toCamelCase("aBc"));
assertEquals("aBcDef", StringUtil.toCamelCase(" aBc def "));
assertEquals("aBcDef", StringUtil.toCamelCase("aBcDef"));
assertEquals("aBcDefGhi", StringUtil.toCamelCase("aBc def_ghi"));
assertEquals("aBcDefGhi", StringUtil.toCamelCase("aBcDefGhi"));
assertEquals("aBcDefGhi123", StringUtil.toCamelCase("aBc def_ghi 123"));
assertEquals("aBcDefGhi123", StringUtil.toCamelCase("aBcDefGhi123"));
assertEquals("aBcDefGhi123", StringUtil.toCamelCase("aBcDEFGhi123"));
assertEquals("123ABcDefGhi", StringUtil.toCamelCase("123aBcDEFGhi")); // 数字开始
// 不保留下划线
assertEquals("ab", StringUtil.toCamelCase("__AB__"));
assertEquals("ab", StringUtil.toCamelCase("__Ab__"));
assertEquals("aB", StringUtil.toCamelCase("__aB__"));
assertEquals("ab", StringUtil.toCamelCase("__ab__"));
assertEquals("aB", StringUtil.toCamelCase("__A__B__"));
assertEquals("aB", StringUtil.toCamelCase("__A__b__"));
assertEquals("aB", StringUtil.toCamelCase("__a__B__"));
assertEquals("aB", StringUtil.toCamelCase("__a__b__"));
// 保留除下划线以外的其它分隔符
assertEquals("..ab..", StringUtil.toCamelCase("..AB.."));
assertEquals("..ab..", StringUtil.toCamelCase("..Ab.."));
assertEquals("..aB..", StringUtil.toCamelCase("..aB.."));
assertEquals("..ab..", StringUtil.toCamelCase("..ab.."));
assertEquals("..a..b..", StringUtil.toCamelCase("..A..B.."));
assertEquals("..a..b..", StringUtil.toCamelCase("..A..b.."));
assertEquals("..a..b..", StringUtil.toCamelCase("..a..B.."));
assertEquals("..a..b..", StringUtil.toCamelCase("..a..b.."));
assertEquals("..a..123B..", StringUtil.toCamelCase("..A..123B.."));
assertEquals("..a..123B..", StringUtil.toCamelCase("..A..123b.."));
assertEquals("..a..123B..", StringUtil.toCamelCase("..a..123B.."));
assertEquals("..a..123B..", StringUtil.toCamelCase("..a..123b.."));
assertEquals("fmh.m.0.n", StringUtil.toCamelCase("_fmh.m._0.n"));
assertEquals("aaa-bbb-ccc", StringUtil.toCamelCase("aaa-bbb-ccc"));
}
@Test
public void toPascalCase() {
assertNull(StringUtil.toPascalCase(null));
assertEquals("", StringUtil.toPascalCase(""));
assertEquals("A", StringUtil.toPascalCase("A"));
assertEquals("A", StringUtil.toPascalCase("a"));
assertEquals("Ab", StringUtil.toPascalCase("AB"));
assertEquals("Ab", StringUtil.toPascalCase("Ab"));
assertEquals("AB", StringUtil.toPascalCase("aB"));
assertEquals("Ab", StringUtil.toPascalCase("ab"));
assertEquals("AB", StringUtil.toPascalCase("A_B"));
assertEquals("AB", StringUtil.toPascalCase("A_b"));
assertEquals("AB", StringUtil.toPascalCase("a_B"));
assertEquals("AB", StringUtil.toPascalCase("a_b"));
assertEquals("ABc", StringUtil.toPascalCase("aBc"));
assertEquals("ABcDef", StringUtil.toPascalCase(" aBc def "));
assertEquals("ABcDef", StringUtil.toPascalCase("aBcDef"));
assertEquals("ABcDefGhi", StringUtil.toPascalCase("aBc def_ghi"));
assertEquals("ABcDefGhi", StringUtil.toPascalCase("aBcDefGhi"));
assertEquals("ABcDefGhi123", StringUtil.toPascalCase("aBc def_ghi 123"));
assertEquals("ABcDefGhi123", StringUtil.toPascalCase("aBcDefGhi123"));
assertEquals("ABcDefGhi123", StringUtil.toPascalCase("aBcDEFGhi123"));
assertEquals("123ABcDefGhi", StringUtil.toPascalCase("123aBcDEFGhi")); // 数字开始
// 不保留下划线
assertEquals("Ab", StringUtil.toPascalCase("__AB__"));
assertEquals("Ab", StringUtil.toPascalCase("__Ab__"));
assertEquals("AB", StringUtil.toPascalCase("__aB__"));
assertEquals("Ab", StringUtil.toPascalCase("__ab__"));
assertEquals("AB", StringUtil.toPascalCase("__A__B__"));
assertEquals("AB", StringUtil.toPascalCase("__A__b__"));
assertEquals("AB", StringUtil.toPascalCase("__a__B__"));
assertEquals("AB", StringUtil.toPascalCase("__a__b__"));
// 保留除下划线以外的其它分隔符
assertEquals("..Ab..", StringUtil.toPascalCase("..AB.."));
assertEquals("..Ab..", StringUtil.toPascalCase("..Ab.."));
assertEquals("..AB..", StringUtil.toPascalCase("..aB.."));
assertEquals("..Ab..", StringUtil.toPascalCase("..ab.."));
assertEquals("..A..B..", StringUtil.toPascalCase("..A..B.."));
assertEquals("..A..B..", StringUtil.toPascalCase("..A..b.."));
assertEquals("..A..B..", StringUtil.toPascalCase("..a..B.."));
assertEquals("..A..B..", StringUtil.toPascalCase("..a..b.."));
assertEquals("..A..123B..", StringUtil.toPascalCase("..A..123B.."));
assertEquals("..A..123B..", StringUtil.toPascalCase("..A..123b.."));
assertEquals("..A..123B..", StringUtil.toPascalCase("..a..123B.."));
assertEquals("..A..123B..", StringUtil.toPascalCase("..a..123b.."));
assertEquals("Fmh.M.0.N", StringUtil.toPascalCase("_fmh.m._0.n"));
assertEquals("Aaa-Bbb-Ccc", StringUtil.toPascalCase("aaa-bbb-ccc"));
}
@Test
public void toUpperCaseWithUnderscores() {
assertNull(StringUtil.toUpperCaseWithUnderscores(null));
assertEquals("", StringUtil.toUpperCaseWithUnderscores(""));
assertEquals("A", StringUtil.toUpperCaseWithUnderscores("A"));
assertEquals("A", StringUtil.toUpperCaseWithUnderscores("a"));
assertEquals("AB", StringUtil.toUpperCaseWithUnderscores("AB"));
assertEquals("AB", StringUtil.toUpperCaseWithUnderscores("Ab"));
assertEquals("A_B", StringUtil.toUpperCaseWithUnderscores("aB"));
assertEquals("AB", StringUtil.toUpperCaseWithUnderscores("ab"));
assertEquals("A_B", StringUtil.toUpperCaseWithUnderscores("A_B"));
assertEquals("A_B", StringUtil.toUpperCaseWithUnderscores("A_b"));
assertEquals("A_B", StringUtil.toUpperCaseWithUnderscores("a_B"));
assertEquals("A_B", StringUtil.toUpperCaseWithUnderscores("a_b"));
assertEquals("A_BC", StringUtil.toUpperCaseWithUnderscores("aBc"));
assertEquals("A_BC_DEF", StringUtil.toUpperCaseWithUnderscores(" aBc def "));
assertEquals("A_BC_DEF", StringUtil.toUpperCaseWithUnderscores("aBcDef"));
assertEquals("A_BC_DEF_GHI", StringUtil.toUpperCaseWithUnderscores("aBc def_ghi"));
assertEquals("A_BC_DEF_GHI", StringUtil.toUpperCaseWithUnderscores("aBcDefGhi"));
assertEquals("A_BC_DEF_GHI_123", StringUtil.toUpperCaseWithUnderscores("aBc def_ghi 123"));
assertEquals("A_BC_DEF_GHI_123", StringUtil.toUpperCaseWithUnderscores("aBcDefGhi123"));
assertEquals("A_BC_DEF_GHI_123", StringUtil.toUpperCaseWithUnderscores("aBcDEFGhi123"));
assertEquals("123_A_BC_DEF_GHI", StringUtil.toUpperCaseWithUnderscores("123aBcDEFGhi")); // 数字开始
// 保留下划线
assertEquals("__AB__", StringUtil.toUpperCaseWithUnderscores("__AB__"));
assertEquals("__AB__", StringUtil.toUpperCaseWithUnderscores("__Ab__"));
assertEquals("__A_B__", StringUtil.toUpperCaseWithUnderscores("__aB__"));
assertEquals("__AB__", StringUtil.toUpperCaseWithUnderscores("__ab__"));
assertEquals("__A__B__", StringUtil.toUpperCaseWithUnderscores("__A__B__"));
assertEquals("__A__B__", StringUtil.toUpperCaseWithUnderscores("__A__b__"));
assertEquals("__A__B__", StringUtil.toUpperCaseWithUnderscores("__a__B__"));
assertEquals("__A__B__", StringUtil.toUpperCaseWithUnderscores("__a__b__"));
// 保留所有的分隔符
assertEquals("..AB..", StringUtil.toUpperCaseWithUnderscores("..AB.."));
assertEquals("..AB..", StringUtil.toUpperCaseWithUnderscores("..Ab.."));
assertEquals("..A_B..", StringUtil.toUpperCaseWithUnderscores("..aB.."));
assertEquals("..AB..", StringUtil.toUpperCaseWithUnderscores("..ab.."));
assertEquals("..A..B..", StringUtil.toUpperCaseWithUnderscores("..A..B.."));
assertEquals("..A..B..", StringUtil.toUpperCaseWithUnderscores("..A..b.."));
assertEquals("..A..B..", StringUtil.toUpperCaseWithUnderscores("..a..B.."));
assertEquals("..A..B..", StringUtil.toUpperCaseWithUnderscores("..a..b.."));
assertEquals("..A..123_B..", StringUtil.toUpperCaseWithUnderscores("..A..123B.."));
assertEquals("..A..123_B..", StringUtil.toUpperCaseWithUnderscores("..A..123b.."));
assertEquals("..A..123_B..", StringUtil.toUpperCaseWithUnderscores("..a..123B.."));
assertEquals("..A..123_B..", StringUtil.toUpperCaseWithUnderscores("..a..123b.."));
assertEquals("_FMH.M._0.N", StringUtil.toUpperCaseWithUnderscores("_fmh.m._0.n"));
assertEquals("AAA-BBB-CCC", StringUtil.toUpperCaseWithUnderscores("aaa-bbb-ccc"));
}
@Test
public void toLowerCaseWithUnderscores() {
assertNull(StringUtil.toLowerCaseWithUnderscores(null));
assertEquals("", StringUtil.toLowerCaseWithUnderscores(""));
assertEquals("a", StringUtil.toLowerCaseWithUnderscores("A"));
assertEquals("a", StringUtil.toLowerCaseWithUnderscores("a"));
assertEquals("ab", StringUtil.toLowerCaseWithUnderscores("AB"));
assertEquals("ab", StringUtil.toLowerCaseWithUnderscores("Ab"));
assertEquals("a_b", StringUtil.toLowerCaseWithUnderscores("aB"));
assertEquals("ab", StringUtil.toLowerCaseWithUnderscores("ab"));
assertEquals("a_b", StringUtil.toLowerCaseWithUnderscores("A_B"));
assertEquals("a_b", StringUtil.toLowerCaseWithUnderscores("A_b"));
assertEquals("a_b", StringUtil.toLowerCaseWithUnderscores("a_B"));
assertEquals("a_b", StringUtil.toLowerCaseWithUnderscores("a_b"));
assertEquals("a_bc", StringUtil.toLowerCaseWithUnderscores("aBc"));
assertEquals("a_bc_def", StringUtil.toLowerCaseWithUnderscores(" aBc def "));
assertEquals("a_bc_def", StringUtil.toLowerCaseWithUnderscores("aBcDef"));
assertEquals("a_bc_def_ghi", StringUtil.toLowerCaseWithUnderscores("aBc def_ghi"));
assertEquals("a_bc_def_ghi", StringUtil.toLowerCaseWithUnderscores("aBcDefGhi"));
assertEquals("a_bc_def_ghi_123", StringUtil.toLowerCaseWithUnderscores("aBc def_ghi 123"));
assertEquals("a_bc_def_ghi_123", StringUtil.toLowerCaseWithUnderscores("aBcDefGhi123"));
assertEquals("a_bc_def_ghi_123", StringUtil.toLowerCaseWithUnderscores("aBcDEFGhi123"));
assertEquals("123_a_bc_def_ghi", StringUtil.toLowerCaseWithUnderscores("123aBcDEFGhi")); // 数字开始
// 保留下划线
assertEquals("__ab__", StringUtil.toLowerCaseWithUnderscores("__AB__"));
assertEquals("__ab__", StringUtil.toLowerCaseWithUnderscores("__Ab__"));
assertEquals("__a_b__", StringUtil.toLowerCaseWithUnderscores("__aB__"));
assertEquals("__ab__", StringUtil.toLowerCaseWithUnderscores("__ab__"));
assertEquals("__a__b__", StringUtil.toLowerCaseWithUnderscores("__A__B__"));
assertEquals("__a__b__", StringUtil.toLowerCaseWithUnderscores("__A__b__"));
assertEquals("__a__b__", StringUtil.toLowerCaseWithUnderscores("__a__B__"));
assertEquals("__a__b__", StringUtil.toLowerCaseWithUnderscores("__a__b__"));
// 保留所有的分隔符
assertEquals("..ab..", StringUtil.toLowerCaseWithUnderscores("..AB.."));
assertEquals("..ab..", StringUtil.toLowerCaseWithUnderscores("..Ab.."));
assertEquals("..a_b..", StringUtil.toLowerCaseWithUnderscores("..aB.."));
assertEquals("..ab..", StringUtil.toLowerCaseWithUnderscores("..ab.."));
assertEquals("..a..b..", StringUtil.toLowerCaseWithUnderscores("..A..B.."));
assertEquals("..a..b..", StringUtil.toLowerCaseWithUnderscores("..A..b.."));
assertEquals("..a..b..", StringUtil.toLowerCaseWithUnderscores("..a..B.."));
assertEquals("..a..b..", StringUtil.toLowerCaseWithUnderscores("..a..b.."));
assertEquals("..a..123_b..", StringUtil.toLowerCaseWithUnderscores("..A..123B.."));
assertEquals("..a..123_b..", StringUtil.toLowerCaseWithUnderscores("..A..123b.."));
assertEquals("..a..123_b..", StringUtil.toLowerCaseWithUnderscores("..a..123B.."));
assertEquals("..a..123_b..", StringUtil.toLowerCaseWithUnderscores("..a..123b.."));
assertEquals("_fmh.m._0.n", StringUtil.toLowerCaseWithUnderscores("_fmh.m._0.n"));
assertEquals("aaa-bbb-ccc", StringUtil.toLowerCaseWithUnderscores("aaa-bbb-ccc"));
}
// ==========================================================================
// 字符串分割函数。
//
// 将字符串按指定分隔符分割。
// ==========================================================================
@Test
public void splitChar() {
assertNull(StringUtil.split(null, '.'));
assertArrayEquals(new String[0], StringUtil.split("", '.'));
assertArrayEquals(new String[] { "a", "b", "c" }, StringUtil.split("a.b.c", '.'));
assertArrayEquals(new String[] { "a", "b", "c" }, StringUtil.split("a..b.c", '.'));
assertArrayEquals(new String[] { "a:b:c" }, StringUtil.split("a:b:c", '.'));
assertArrayEquals(new String[] { "a", "b", "c" }, StringUtil.split("a b c", ' '));
}
@Test
public void splitString() {
assertNull(StringUtil.split(null, ":"));
assertArrayEquals(new String[0], StringUtil.split("", ":"));
assertArrayEquals(new String[] { "abc", "def" }, StringUtil.split("abc def", null));
assertArrayEquals(new String[] { "abc", "def" }, StringUtil.split("abc def", " "));
assertArrayEquals(new String[] { "abc", "def" }, StringUtil.split("abc def", " "));
assertArrayEquals(new String[] { "ab", "cd", "ef" }, StringUtil.split(" ab: cd::ef ", ": "));
assertArrayEquals(new String[] { "abc.def" }, StringUtil.split("abc.def", ""));
}
@Test
public void splitStringMax() {
assertNull(StringUtil.split(null, null, 0));
assertArrayEquals(new String[0], StringUtil.split("", null, 0));
assertArrayEquals(new String[] { "ab", "cd", "ef" }, StringUtil.split("ab cd ef", null, 0));
assertArrayEquals(new String[] { "ab", "cd", "ef" }, StringUtil.split(" ab cd ef ", null, 0));
assertArrayEquals(new String[] { "ab", "cd ef " }, StringUtil.split(" ab cd ef ", null, 2));
assertArrayEquals(new String[] { "ab", "cd", "ef" }, StringUtil.split("ab:cd::ef", ":", 0));
assertArrayEquals(new String[] { "ab", "cd:ef" }, StringUtil.split("ab:cd:ef", ":", 2));
assertArrayEquals(new String[] { "abc.def" }, StringUtil.split("abc.def", "", 2));
assertArrayEquals(new String[] { "ab", "cd: ef" }, StringUtil.split("ab: cd: ef", ": ", 2));
}
// ==========================================================================
// 字符串连接函数。
//
// 将多个对象按指定分隔符连接成字符串。
// ==========================================================================
@Test
public void joinArray() {
assertNull(StringUtil.join((Object[]) null, ";"));
assertEquals("", StringUtil.join(new String[0], ";"));
assertEquals("", StringUtil.join(new String[] { null }, ";"));
assertEquals("a--b--c", StringUtil.join(new String[] { "a", "b", "c" }, "--"));
assertEquals("abc", StringUtil.join(new String[] { "a", "b", "c" }, null));
assertEquals("abc", StringUtil.join(new String[] { "a", "b", "c" }, ""));
assertEquals(",,a", StringUtil.join(new String[] { null, "", "a" }, ","));
}
@Test
public void joinIterable() {
assertNull(StringUtil.join((Iterable<?>) null, ";"));
assertEquals("", StringUtil.join(Arrays.asList(new String[0]), ";"));
assertEquals("", StringUtil.join(Arrays.asList(new String[] { null }), ";"));
assertEquals("a--b--c", StringUtil.join(Arrays.asList(new String[] { "a", "b", "c" }), "--"));
assertEquals("abc", StringUtil.join(Arrays.asList(new String[] { "a", "b", "c" }), null));
assertEquals("abc", StringUtil.join(Arrays.asList(new String[] { "a", "b", "c" }), ""));
assertEquals(",,a", StringUtil.join(Arrays.asList(new String[] { null, "", "a" }), ","));
}
// ==========================================================================
// 字符串查找函数 —— 字符或字符串。
// ==========================================================================
@Test
public void indexOfChar() {
assertEquals(-1, StringUtil.indexOf(null, 'a'));
assertEquals(-1, StringUtil.indexOf("", 'a'));
assertEquals(0, StringUtil.indexOf("aabaabaa", 'a'));
assertEquals(2, StringUtil.indexOf("aabaabaa", 'b'));
assertEquals(-1, StringUtil.indexOf(null, 'a', 0));
assertEquals(-1, StringUtil.indexOf("", 'a', 0));
assertEquals(2, StringUtil.indexOf("aabaabaa", 'b', 0));
assertEquals(5, StringUtil.indexOf("aabaabaa", 'b', 3));
assertEquals(-1, StringUtil.indexOf("aabaabaa", 'b', 9));
assertEquals(2, StringUtil.indexOf("aabaabaa", 'b', -1));
}
@Test
public void indexOfString() {
assertEquals(-1, StringUtil.indexOf(null, "a"));
assertEquals(-1, StringUtil.indexOf("aaa", null));
assertEquals(0, StringUtil.indexOf("", ""));
assertEquals(0, StringUtil.indexOf("aabaabaa", "a"));
assertEquals(2, StringUtil.indexOf("aabaabaa", "b"));
assertEquals(1, StringUtil.indexOf("aabaabaa", "ab"));
assertEquals(0, StringUtil.indexOf("aabaabaa", ""));
assertEquals(-1, StringUtil.indexOf(null, "a", 0));
assertEquals(-1, StringUtil.indexOf("aaa", null, 0));
assertEquals(0, StringUtil.indexOf("", "", 0));
assertEquals(0, StringUtil.indexOf("aabaabaa", "a", 0));
assertEquals(2, StringUtil.indexOf("aabaabaa", "b", 0));
assertEquals(1, StringUtil.indexOf("aabaabaa", "ab", 0));
assertEquals(5, StringUtil.indexOf("aabaabaa", "b", 3));
assertEquals(-1, StringUtil.indexOf("aabaabaa", "b", 9));
assertEquals(2, StringUtil.indexOf("aabaabaa", "b", -1));
assertEquals(2, StringUtil.indexOf("aabaabaa", "", 2));
assertEquals(3, StringUtil.indexOf("abc", "", 9));
}
@Test
public void lastIndexOfChar() {
assertEquals(-1, StringUtil.lastIndexOf(null, 'a'));
assertEquals(-1, StringUtil.lastIndexOf("", 'a'));
assertEquals(7, StringUtil.lastIndexOf("aabaabaa", 'a'));
assertEquals(5, StringUtil.lastIndexOf("aabaabaa", 'b'));
assertEquals(-1, StringUtil.lastIndexOf(null, 'a', 0));
assertEquals(-1, StringUtil.lastIndexOf("", 'a', 0));
assertEquals(5, StringUtil.lastIndexOf("aabaabaa", 'b', 8));
assertEquals(2, StringUtil.lastIndexOf("aabaabaa", 'b', 4));
assertEquals(-1, StringUtil.lastIndexOf("aabaabaa", 'b', 0));
assertEquals(5, StringUtil.lastIndexOf("aabaabaa", 'b', 9));
assertEquals(-1, StringUtil.lastIndexOf("aabaabaa", 'b', -1));
assertEquals(0, StringUtil.lastIndexOf("aabaabaa", 'a', 0));
}
@Test
public void lastIndexOfString() {
assertEquals(-1, StringUtil.lastIndexOf(null, "a"));
assertEquals(-1, StringUtil.lastIndexOf("abc", null));
assertEquals(-1, StringUtil.lastIndexOf("", "a"));
assertEquals(7, StringUtil.lastIndexOf("aabaabaa", "a"));
assertEquals(5, StringUtil.lastIndexOf("aabaabaa", "b"));
assertEquals(-1, StringUtil.lastIndexOf(null, "a", 0));
assertEquals(-1, StringUtil.lastIndexOf("aaa", null, 0));
assertEquals(7, StringUtil.lastIndexOf("aabaabaa", "a", 8));
assertEquals(5, StringUtil.lastIndexOf("aabaabaa", "b", 8));
assertEquals(4, StringUtil.lastIndexOf("aabaabaa", "ab", 8));
assertEquals(5, StringUtil.lastIndexOf("aabaabaa", "b", 9));
assertEquals(-1, StringUtil.lastIndexOf("aabaabaa", "b", -1));
assertEquals(0, StringUtil.lastIndexOf("aabaabaa", "a", 0));
assertEquals(-1, StringUtil.lastIndexOf("aabaabaa", "b", 0));
}
@Test
public void indexOfAnyChar() {
assertEquals(-1, StringUtil.indexOfAny(null, "a".toCharArray()));
assertEquals(-1, StringUtil.indexOfAny("", "a".toCharArray()));
assertEquals(-1, StringUtil.indexOfAny("abc", (char[]) null));
assertEquals(-1, StringUtil.indexOfAny("abc", "".toCharArray()));
assertEquals(0, StringUtil.indexOfAny("zzabyycdxx", "za".toCharArray()));
assertEquals(3, StringUtil.indexOfAny("zzabyycdxx", "by".toCharArray()));
assertEquals(-1, StringUtil.indexOfAny("aba", "z".toCharArray()));
}
@Test
public void indexOfAnyString() {
assertEquals(-1, StringUtil.indexOfAny(null, "a"));
assertEquals(-1, StringUtil.indexOfAny("", "a"));
assertEquals(-1, StringUtil.indexOfAny("abc", (String) null));
assertEquals(-1, StringUtil.indexOfAny("abc", ""));
assertEquals(0, StringUtil.indexOfAny("zzabyycdxx", "za"));
assertEquals(3, StringUtil.indexOfAny("zzabyycdxx", "by"));
assertEquals(-1, StringUtil.indexOfAny("aba", "z"));
}
@Test
public void indexOfAnyStrings() {
assertEquals(-1, StringUtil.indexOfAny(null, new String[1]));
assertEquals(-1, StringUtil.indexOfAny("abc", (String[]) null));
assertEquals(-1, StringUtil.indexOfAny("abc", new String[0]));
assertEquals(2, StringUtil.indexOfAny("zzabyycdxx", new String[] { "ab", "cd" }));
assertEquals(2, StringUtil.indexOfAny("zzabyycdxx", new String[] { "cd", "ab" }));
assertEquals(-1, StringUtil.indexOfAny("zzabyycdxx", new String[] { "mn", "op" }));
assertEquals(1, StringUtil.indexOfAny("zzabyycdxx", new String[] { "zab", "aby" }));
assertEquals(1, StringUtil.indexOfAny("zzabyycdxx", new String[] { null, "zab", "aby" }));
assertEquals(0, StringUtil.indexOfAny("zzabyycdxx", new String[] { "" }));
assertEquals(0, StringUtil.indexOfAny("", new String[] { "" }));
assertEquals(-1, StringUtil.indexOfAny("", new String[] { "a" }));
}
@Test
public void indexOfAnyButChar() {
assertEquals(-1, StringUtil.indexOfAnyBut(null, "a".toCharArray()));
assertEquals(-1, StringUtil.indexOfAnyBut("", "a".toCharArray()));
assertEquals(-1, StringUtil.indexOfAnyBut("a", (char[]) null));
assertEquals(-1, StringUtil.indexOfAnyBut("a", "".toCharArray()));
assertEquals(3, StringUtil.indexOfAnyBut("zzabyycdxx", "za".toCharArray()));
assertEquals(0, StringUtil.indexOfAnyBut("zzabyycdxx", "by".toCharArray()));
assertEquals(-1, StringUtil.indexOfAnyBut("aba", "ab".toCharArray()));
}
@Test
public void indexOfAnyButString() {
assertEquals(-1, StringUtil.indexOfAnyBut(null, "a"));
assertEquals(-1, StringUtil.indexOfAnyBut("", "a"));
assertEquals(-1, StringUtil.indexOfAnyBut("a", (String) null));
assertEquals(-1, StringUtil.indexOfAnyBut("a", ""));
assertEquals(3, StringUtil.indexOfAnyBut("zzabyycdxx", "za"));
assertEquals(0, StringUtil.indexOfAnyBut("zzabyycdxx", "by"));
assertEquals(-1, StringUtil.indexOfAnyBut("aba", "ab"));
}
@Test
public void lastIndexAnyStrings() {
assertEquals(-1, StringUtil.lastIndexOfAny(null, new String[1]));
assertEquals(-1, StringUtil.lastIndexOfAny("abc", (String[]) null));
assertEquals(-1, StringUtil.lastIndexOfAny("abc", new String[0]));
assertEquals(-1, StringUtil.lastIndexOfAny("abc", new String[] { null }));
assertEquals(6, StringUtil.lastIndexOfAny("zzabyycdxx", new String[] { "ab", "cd" }));
assertEquals(6, StringUtil.lastIndexOfAny("zzabyycdxx", new String[] { "cd", "ab" }));
assertEquals(-1, StringUtil.lastIndexOfAny("zzabyycdxx", new String[] { "mn", "op" }));
assertEquals(-1, StringUtil.lastIndexOfAny("zzabyycdxx", new String[] { "mn", "op" }));
assertEquals(10, StringUtil.lastIndexOfAny("zzabyycdxx", new String[] { "mn", "" }));
}
@Test
public void containsChar() {
assertFalse(StringUtil.contains(null, 'a'));
assertFalse(StringUtil.contains("", 'a'));
assertTrue(StringUtil.contains("abc", 'a'));
assertFalse(StringUtil.contains("abc", 'z'));
}
@Test
public void containsString() {
assertFalse(StringUtil.contains(null, "a"));
assertFalse(StringUtil.contains("aaa", null));
assertTrue(StringUtil.contains("", ""));
assertTrue(StringUtil.contains("abc", ""));
assertTrue(StringUtil.contains("abc", "a"));
assertFalse(StringUtil.contains("abc", "z"));
}
@Test
public void countMatches() {
assertEquals(0, StringUtil.countMatches(null, "a"));
assertEquals(0, StringUtil.countMatches("", "a"));
assertEquals(0, StringUtil.countMatches("abba", null));
assertEquals(0, StringUtil.countMatches("abba", ""));
assertEquals(2, StringUtil.countMatches("abba", "a"));
assertEquals(1, StringUtil.countMatches("abba", "ab"));
assertEquals(0, StringUtil.countMatches("abba", "xxx"));
}
@Test
public void containsOnlyChar() {
assertFalse(StringUtil.containsOnly(null, "a".toCharArray()));
assertFalse(StringUtil.containsOnly("abc", (char[]) null));
assertTrue(StringUtil.containsOnly("", "a".toCharArray()));
assertFalse(StringUtil.containsOnly("ab", "".toCharArray()));
assertTrue(StringUtil.containsOnly("abab", "abc".toCharArray()));
assertFalse(StringUtil.containsOnly("ab1", "abc".toCharArray()));
assertFalse(StringUtil.containsOnly("abz", "abc".toCharArray()));
}
@Test
public void containsOnlyString() {
assertFalse(StringUtil.containsOnly(null, "a"));
assertFalse(StringUtil.containsOnly("abc", (String) null));
assertTrue(StringUtil.containsOnly("", "a"));
assertFalse(StringUtil.containsOnly("ab", ""));
assertTrue(StringUtil.containsOnly("abab", "abc"));
assertFalse(StringUtil.containsOnly("ab1", "abc"));
assertFalse(StringUtil.containsOnly("abz", "abc"));
}
@Test
public void containsNoneChar() {
assertTrue(StringUtil.containsNone(null, "a".toCharArray()));
assertTrue(StringUtil.containsNone("abc", (char[]) null));
assertTrue(StringUtil.containsNone("", "a".toCharArray()));
assertTrue(StringUtil.containsNone("ab", "".toCharArray()));
assertTrue(StringUtil.containsNone("abab", "xyz".toCharArray()));
assertTrue(StringUtil.containsNone("ab1", "xyz".toCharArray()));
assertFalse(StringUtil.containsNone("abz", "xyz".toCharArray()));
}
@Test
public void containsNoneString() {
assertTrue(StringUtil.containsNone(null, "a"));
assertTrue(StringUtil.containsNone("abc", (String) null));
assertTrue(StringUtil.containsNone("", "a"));
assertTrue(StringUtil.containsNone("ab", ""));
assertTrue(StringUtil.containsNone("abab", "xyz"));
assertTrue(StringUtil.containsNone("ab1", "xyz"));
assertFalse(StringUtil.containsNone("abz", "xyz"));
}
// ==========================================================================
// 取子串函数。
// ==========================================================================
@Test
public void substring() {
assertNull(StringUtil.substring(null, 1));
assertEquals("", StringUtil.substring("", 1));
assertEquals("abc", StringUtil.substring("abc", 0));
assertEquals("c", StringUtil.substring("abc", 2));
assertEquals("", StringUtil.substring("abc", 4));
assertEquals("bc", StringUtil.substring("abc", -2));
assertEquals("abc", StringUtil.substring("abc", -4));
assertNull(StringUtil.substring(null, 1, 2));
assertEquals("", StringUtil.substring("", 1, 2));
assertEquals("ab", StringUtil.substring("abc", 0, 2));
assertEquals("", StringUtil.substring("abc", 2, 0));
assertEquals("c", StringUtil.substring("abc", 2, 4));
assertEquals("", StringUtil.substring("abc", 4, 6));
assertEquals("", StringUtil.substring("abc", 2, 2));
assertEquals("b", StringUtil.substring("abc", -2, -1));
assertEquals("ab", StringUtil.substring("abc", -4, 2));
assertEquals("", StringUtil.substring("abc", -5, -4));
}
@Test
public void left() {
assertNull(StringUtil.left(null, 1));
assertEquals("", StringUtil.left("abc", -1));
assertEquals("", StringUtil.left("", 1));
assertEquals("", StringUtil.left("abc", 0));
assertEquals("ab", StringUtil.left("abc", 2));
assertEquals("abc", StringUtil.left("abc", 4));
}
@Test
public void right() {
assertNull(StringUtil.right(null, 1));
assertEquals("", StringUtil.right("abc", -1));
assertEquals("", StringUtil.right("", 1));
assertEquals("", StringUtil.right("abc", 0));
assertEquals("bc", StringUtil.right("abc", 2));
assertEquals("abc", StringUtil.right("abc", 4));
}
@Test
public void mid() {
assertNull(StringUtil.mid(null, 1, 2));
assertEquals("", StringUtil.mid("abc", 1, -1));
assertEquals("", StringUtil.mid("", 0, 1));
assertEquals("ab", StringUtil.mid("abc", 0, 2));
assertEquals("abc", StringUtil.mid("abc", 0, 4));
assertEquals("c", StringUtil.mid("abc", 2, 4));
assertEquals("", StringUtil.mid("abc", 4, 2));
assertEquals("ab", StringUtil.mid("abc", -2, 2));
}
// ==========================================================================
// 搜索并取子串函数。
// ==========================================================================
@Test
public void substringBefore() {
assertNull(StringUtil.substringBefore(null, "a"));
assertEquals("", StringUtil.substringBefore("", "a"));
assertEquals("", StringUtil.substringBefore("abc", "a"));
assertEquals("a", StringUtil.substringBefore("abcba", "b"));
assertEquals("ab", StringUtil.substringBefore("abc", "c"));
assertEquals("abc", StringUtil.substringBefore("abc", "d"));
assertEquals("", StringUtil.substringBefore("abc", ""));
assertEquals("abc", StringUtil.substringBefore("abc", null));
}
@Test
public void substringAfter() {
assertNull(StringUtil.substringAfter(null, "a"));
assertEquals("", StringUtil.substringAfter("", "a"));
assertEquals("", StringUtil.substringAfter("abc", null));
assertEquals("bc", StringUtil.substringAfter("abc", "a"));
assertEquals("cba", StringUtil.substringAfter("abcba", "b"));
assertEquals("", StringUtil.substringAfter("abc", "c"));
assertEquals("", StringUtil.substringAfter("abc", "d"));
assertEquals("abc", StringUtil.substringAfter("abc", ""));
}
@Test
public void substringBeforeLast() {
assertNull(StringUtil.substringBeforeLast(null, "a"));
assertEquals("", StringUtil.substringBeforeLast("", "a"));
assertEquals("abc", StringUtil.substringBeforeLast("abcba", "b"));
assertEquals("ab", StringUtil.substringBeforeLast("abc", "c"));
assertEquals("", StringUtil.substringBeforeLast("a", "a"));
assertEquals("a", StringUtil.substringBeforeLast("a", "z"));
assertEquals("a", StringUtil.substringBeforeLast("a", null));
assertEquals("a", StringUtil.substringBeforeLast("a", ""));
}
@Test
public void substringAfterLast() {
assertNull(StringUtil.substringAfterLast(null, "a"));
assertEquals("", StringUtil.substringAfterLast("", "a"));
assertEquals("", StringUtil.substringAfterLast("abc", ""));
assertEquals("", StringUtil.substringAfterLast("abc", null));
assertEquals("bc", StringUtil.substringAfterLast("abc", "a"));
assertEquals("a", StringUtil.substringAfterLast("abcba", "b"));
assertEquals("", StringUtil.substringAfterLast("abc", "c"));
assertEquals("", StringUtil.substringAfterLast("a", "a"));
assertEquals("", StringUtil.substringAfterLast("a", "z"));
}
@Test
public void substringBetween() {
assertNull(StringUtil.substringBetween(null, "a"));
assertEquals("", StringUtil.substringBetween("", ""));
assertNull(StringUtil.substringBetween("", "tag"));
assertNull(StringUtil.substringBetween("tagabctag", null));
assertEquals("", StringUtil.substringBetween("tagabctag", ""));
assertEquals("abc", StringUtil.substringBetween("tagabctag", "tag"));
assertNull(StringUtil.substringBetween(null, "a", "b"));
assertEquals("", StringUtil.substringBetween("", "", ""));
assertNull(StringUtil.substringBetween("", "", "tag"));
assertNull(StringUtil.substringBetween("", "tag", "tag"));
assertNull(StringUtil.substringBetween("yabcz", null, null));
assertEquals("", StringUtil.substringBetween("yabcz", "", ""));
assertEquals("abc", StringUtil.substringBetween("yabcz", "y", "z"));
assertEquals("abc", StringUtil.substringBetween("yabczyabcz", "y", "z"));
}
// ==========================================================================
// 删除字符。
// ==========================================================================
@Test
public void deleteWhitespace() {
assertNull(StringUtil.deleteWhitespace(null));
assertEquals("", StringUtil.deleteWhitespace(""));
assertEquals("abc", StringUtil.deleteWhitespace("abc"));
assertEquals("abc", StringUtil.deleteWhitespace(" ab c "));
}
// ==========================================================================
// 替换子串。
// ==========================================================================
@Test
public void replace() {
assertNull(StringUtil.replace(null, "a", "z"));
assertEquals("", StringUtil.replace("", "a", "z"));
assertEquals("aba", StringUtil.replace("aba", null, null));
assertEquals("aba", StringUtil.replace("aba", null, null));
assertEquals("aba", StringUtil.replace("aba", "a", null));
assertEquals("b", StringUtil.replace("aba", "a", ""));
assertEquals("zbz", StringUtil.replace("aba", "a", "z"));
}
@Test
public void replaceMax() {
assertNull(StringUtil.replace(null, "a", "z", 1));
assertEquals("", StringUtil.replace("", "a", "z", 1));
assertEquals("abaa", StringUtil.replace("abaa", null, null, 1));
assertEquals("abaa", StringUtil.replace("abaa", null, null, 1));
assertEquals("abaa", StringUtil.replace("abaa", "a", null, 1));
assertEquals("baa", StringUtil.replace("abaa", "a", "", 1));
assertEquals("abaa", StringUtil.replace("abaa", "a", "z", 0));
assertEquals("zbaa", StringUtil.replace("abaa", "a", "z", 1));
assertEquals("zbza", StringUtil.replace("abaa", "a", "z", 2));
assertEquals("zbzz", StringUtil.replace("abaa", "a", "z", -1));
}
@Test
public void replaceChar() {
assertNull(StringUtil.replaceChar(null, 'a', 'b'));
assertEquals("", StringUtil.replaceChar("", 'a', 'b'));
assertEquals("aycya", StringUtil.replaceChar("abcba", 'b', 'y'));
assertEquals("abcba", StringUtil.replaceChar("abcba", 'z', 'y'));
}
@Test
public void replaceChars() {
assertNull(StringUtil.replaceChars(null, "a", "b"));
assertEquals("", StringUtil.replaceChars("", "a", "b"));
assertEquals("abc", StringUtil.replaceChars("abc", null, "b"));
assertEquals("abc", StringUtil.replaceChars("abc", "", "a"));
assertEquals("ac", StringUtil.replaceChars("abc", "b", null));
assertEquals("ac", StringUtil.replaceChars("abc", "b", ""));
assertEquals("ayzya", StringUtil.replaceChars("abcba", "bc", "yz"));
assertEquals("ayya", StringUtil.replaceChars("abcba", "bc", "y"));
assertEquals("ayzya", StringUtil.replaceChars("abcba", "bc", "yzx"));
String s = new String("abcba");
assertSame(s, StringUtil.replaceChars(s, "de", "xy")); // 未改变
}
@Test
public void overlay() {
assertNull(StringUtil.overlay(null, "abc", 0, 1));
assertEquals("abc", StringUtil.overlay("", "abc", 0, 0));
assertEquals("abef", StringUtil.overlay("abcdef", null, 2, 4));
assertEquals("abef", StringUtil.overlay("abcdef", "", 2, 4));
assertEquals("abef", StringUtil.overlay("abcdef", "", 4, 2));
assertEquals("abzzzzef", StringUtil.overlay("abcdef", "zzzz", 2, 4));
assertEquals("abzzzzef", StringUtil.overlay("abcdef", "zzzz", 4, 2));
assertEquals("zzzzef", StringUtil.overlay("abcdef", "zzzz", -1, 4));
assertEquals("abzzzz", StringUtil.overlay("abcdef", "zzzz", 2, 8));
assertEquals("zzzzabcdef", StringUtil.overlay("abcdef", "zzzz", -2, -3));
assertEquals("abcdefzzzz", StringUtil.overlay("abcdef", "zzzz", 8, 10));
}
// ==========================================================================
// Perl风格的chomp和chop函数。
// ==========================================================================
@Test
public void chomp() {
assertNull(StringUtil.chomp(null));
assertEquals("", StringUtil.chomp(""));
assertEquals("abc ", StringUtil.chomp("abc \r"));
assertEquals("abc", StringUtil.chomp("abc\n"));
assertEquals("abc", StringUtil.chomp("abc\r\n"));
assertEquals("abc\r\n", StringUtil.chomp("abc\r\n\r\n"));
assertEquals("abc\n", StringUtil.chomp("abc\n\r"));
assertEquals("abc\n\rabc", StringUtil.chomp("abc\n\rabc"));
assertEquals("a", StringUtil.chomp("a"));
assertEquals("", StringUtil.chomp("\r"));
assertEquals("", StringUtil.chomp("\n"));
assertEquals("", StringUtil.chomp("\r\n"));
}
@Test
public void chompString() {
assertNull(StringUtil.chomp(null, "aa"));
assertEquals("", StringUtil.chomp("", "aa"));
assertEquals("foo", StringUtil.chomp("foobar", "bar"));
assertEquals("foobar", StringUtil.chomp("foobar", "baz"));
assertEquals("", StringUtil.chomp("foo", "foo"));
assertEquals("foo ", StringUtil.chomp("foo ", "foo"));
assertEquals(" ", StringUtil.chomp(" foo", "foo"));
assertEquals("foo", StringUtil.chomp("foo", "foooo"));
assertEquals("foo", StringUtil.chomp("foo", ""));
assertEquals("foo", StringUtil.chomp("foo", null));
}
@Test
public void chop() {
assertEquals(null, StringUtil.chop(null));
assertEquals("", StringUtil.chop(""));
assertEquals("abc ", StringUtil.chop("abc \r"));
assertEquals("abc", StringUtil.chop("abc\n"));
assertEquals("abc", StringUtil.chop("abc\r\n"));
assertEquals("ab", StringUtil.chop("abc"));
assertEquals("abc\nab", StringUtil.chop("abc\nabc"));
assertEquals("", StringUtil.chop("a"));
assertEquals("", StringUtil.chop("\r"));
assertEquals("", StringUtil.chop("\n"));
assertEquals("", StringUtil.chop("\r\n"));
}
// ==========================================================================
// 重复字符串。
// ==========================================================================
@Test
public void repeat() {
assertNull(StringUtil.repeat(null, 2));
String s = new String();
assertSame(s, StringUtil.repeat(s, 1));
assertSame(s, StringUtil.repeat(s, 2));
s = new String("test");
assertSame(s, StringUtil.repeat(s, 1));
assertEquals("", StringUtil.repeat("", 0));
assertEquals("", StringUtil.repeat("", 2));
assertEquals("aaa", StringUtil.repeat("a", 3));
assertEquals("abab", StringUtil.repeat("ab", 2));
assertEquals("abcdabcd", StringUtil.repeat("abcd", 2));
assertEquals("", StringUtil.repeat("a", -2));
}
// ==========================================================================
// 反转字符串。
// ==========================================================================
@Test
public void reverse() {
assertNull(StringUtil.reverse(null));
assertEquals("", StringUtil.reverse(""));
assertEquals("tab", StringUtil.reverse("bat"));
}
@Test
public void reverseDelimited() {
assertNull(StringUtil.reverseDelimited(null, 'x'));
assertEquals("", StringUtil.reverseDelimited("", 'x'));
assertEquals("a.b.c", StringUtil.reverseDelimited("a.b.c", 'x'));
assertEquals("c.b.a", StringUtil.reverseDelimited("a.b.c", '.'));
}
@Test
public void reverseDelimitedString() {
assertNull(StringUtil.reverseDelimited(null, "", ""));
assertEquals("", StringUtil.reverseDelimited("", "", ""));
assertEquals("a.b.c", StringUtil.reverseDelimited("a.b.c", null, null));
assertEquals("a.b.c", StringUtil.reverseDelimited("a.b.c", "", null));
assertEquals("c,b,a", StringUtil.reverseDelimited("a.b.c", ".", ","));
assertEquals("c b a", StringUtil.reverseDelimited("a.b.c", ".", null));
}
// ==========================================================================
// 取得字符串的缩略。
// ==========================================================================
@Test
public void abbreviate() {
assertEquals(null, StringUtil.abbreviate(null, 4));
assertEquals("", StringUtil.abbreviate("", 4));
assertEquals("abc...", StringUtil.abbreviate("abcdefg", 6));
assertEquals("abcdefg", StringUtil.abbreviate("abcdefg", 7));
assertEquals("abcdefg", StringUtil.abbreviate("abcdefg", 8));
assertEquals("a...", StringUtil.abbreviate("abcdefg", 4));
// maxWidth不足4,则设置成4
assertEquals("a...", StringUtil.abbreviate("abcdefg", 3));
}
@Test
public void abbreviateOffset() {
assertEquals(null, StringUtil.abbreviate(null, 0, 4));
assertEquals("", StringUtil.abbreviate("", 0, 4));
assertEquals("abcdefg...", StringUtil.abbreviate("abcdefghijklmno", -1, 10));
assertEquals("abcdefg...", StringUtil.abbreviate("abcdefghijklmno", 0, 10));
assertEquals("abcdefg...", StringUtil.abbreviate("abcdefghijklmno", 1, 10));
assertEquals("abcdefg...", StringUtil.abbreviate("abcdefghijklmno", 4, 10));
assertEquals("...fghi...", StringUtil.abbreviate("abcdefghijklmno", 5, 10));
assertEquals("...ghij...", StringUtil.abbreviate("abcdefghijklmno", 6, 10));
assertEquals("...ijklmno", StringUtil.abbreviate("abcdefghijklmno", 8, 10));
assertEquals("...ijklmno", StringUtil.abbreviate("abcdefghijklmno", 10, 10));
assertEquals("...ijklmno", StringUtil.abbreviate("abcdefghijklmno", 12, 10));
assertEquals("...ijklmno", StringUtil.abbreviate("abcdefghijklmno", 100, 10));
// maxWidth不足4,则设置成4
assertEquals("a...", StringUtil.abbreviate("abcdefghij", 0, 3));
// maxWidth不足7,则设置成7
assertEquals("...f...", StringUtil.abbreviate("abcdefghij", 5, 6));
}
// ==========================================================================
// 比较两个字符串的异同。
// ==========================================================================
@Test
public void difference() {
assertEquals("robot", StringUtil.difference("i am a machine", "i am a robot"));
assertNull(StringUtil.difference(null, null));
assertEquals("", StringUtil.difference("", ""));
assertEquals("", StringUtil.difference("", null));
assertEquals("abc", StringUtil.difference("", "abc"));
assertEquals("", StringUtil.difference("abc", ""));
assertEquals("", StringUtil.difference("abc", "abc"));
assertEquals("xyz", StringUtil.difference("ab", "abxyz"));
assertEquals("xyz", StringUtil.difference("abcde", "abxyz"));
assertEquals("xyz", StringUtil.difference("abcde", "xyz"));
}
@Test
public void indexOfDifference() {
assertEquals(7, StringUtil.indexOfDifference("i am a machine", "i am a robot"));
assertEquals(-1, StringUtil.indexOfDifference(null, null));
assertEquals(-1, StringUtil.indexOfDifference("", null));
assertEquals(-1, StringUtil.indexOfDifference("", ""));
assertEquals(0, StringUtil.indexOfDifference("", "abc"));
assertEquals(0, StringUtil.indexOfDifference("abc", ""));
assertEquals(-1, StringUtil.indexOfDifference("abc", "abc"));
assertEquals(2, StringUtil.indexOfDifference("ab", "abxyz"));
assertEquals(2, StringUtil.indexOfDifference("abcde", "abxyz"));
assertEquals(0, StringUtil.indexOfDifference("abcde", "xyz"));
assertEquals(-1, StringUtil.indexOfDifference("abcde", new String("abcde")));
}
// ==========================================================================
// 将数字或字节转换成ASCII字符串的函数。
// ==========================================================================
@Test
public void longToString() {
longToString("", 0);
longToString("1", 62);
longToString("2", 62 + 62);
}
private void longToString(String prefix, long base) {
char ch = '0';
for (long i = base; i < base + 10; i++, ch++) {
assertEquals(ch + prefix, StringUtil.longToString(i));
assertEquals(ch + prefix, StringUtil.longToString(-i));
}
ch = 'A';
for (long i = base + 10; i < base + 36; i++, ch++) {
assertEquals(ch + prefix, StringUtil.longToString(i));
assertEquals(ch + prefix, StringUtil.longToString(-i));
}
ch = 'a';
for (long i = base + 36; i < base + 62; i++, ch++) {
assertEquals(ch + prefix, StringUtil.longToString(i));
assertEquals(ch + prefix, StringUtil.longToString(-i));
}
long l = 0 //
+ 62L //
+ 10 * 256L //
+ 2 * 256 * 256L //
+ 1 * 256 * 256 * 256L //
+ 0 * 256 * 256 * 256 * 256L;
assertEquals("cIx81", StringUtil.longToString(l));
assertEquals("IJG2A", StringUtil.longToString(l, true));
}
@Test
public void bytesToString() {
assertEquals("0", StringUtil.bytesToString(null));
assertEquals("0", StringUtil.bytesToString(new byte[] { }));
assertEquals("0", StringUtil.bytesToString(new byte[] { 0, 0, 0, 0, 0, 0 }));
assertEquals("1", StringUtil.bytesToString(new byte[] { 0, 0, 0, 0, 0, 1 }));
assertEquals("GWO823H", StringUtil.bytesToString(new byte[] { 1, 0, 0, 0, 0, 0 }));
assertEquals("cIx81", StringUtil.bytesToString(new byte[] { 0, 1, 2, 10, 62 }));
assertEquals("cIx8QaO8KjH", StringUtil.bytesToString(new byte[] { 0, 1, 2, 10, 62, 0, 1, 2, 10, 62 }));
assertEquals("IJG2Y0YVRQ5V2", StringUtil.bytesToString(new byte[] { 0, 1, 2, 10, 62, 0, 1, 2, 10, 62 }, true));
}
// ==========================================================================
// 缩进排版函数。
// ==========================================================================
@Test
public void indent() {
// str is empty
assertEquals(null, StringUtil.indent((String) null, " "));
assertEquals("", StringUtil.indent("", " "));
// indent is empty
assertEquals("a\nb", StringUtil.indent("a\nb", null));
assertEquals("a\nb", StringUtil.indent("a\nb", ""));
// indents
assertEquals("\n aaa\n bbb\n ccc", StringUtil.indent("\naaa\nbbb\nccc", " "));
assertEquals("aa\n aaa\n bbb\n\n ccc\n\n", StringUtil.indent("aa\naaa\nbbb\n\nccc\n\n", " "));
}
@Test
public void indentWithBuffer() {
StringBuilder buf;
Formatter format;
buf = new StringBuilder();
StringUtil.indent(buf, "", "");
assertEquals("", buf.toString());
buf = new StringBuilder();
StringUtil.indent(buf, "a\nb", " ");
assertEquals("a\n b", buf.toString());
buf = new StringBuilder();
format = new Formatter(buf);
StringUtil.indent(format, "a\nb", " ");
assertEquals("a\n b", buf.toString());
// try appendable other than string builder
StringBuffer buf2 = new StringBuffer();
format = new Formatter(buf2);
StringUtil.indent(format, "a\nb", " ");
assertEquals("a\n b", buf2.toString());
}
}