字符串工具
工具类
|
描述
|
Strings
|
用于对字符串进行各种操作,例如判空、拼接、截取、填充等
|
Joiner
|
用于将多个元素连接成一个字符串,并且可以指定连接符和处理null值的方式
|
Splitter
|
用于将一个字符串分割成多个部分,可以指定分隔符和分割结果的处理方式
|
CharMatcher
|
用于对字符进行匹配和操作
|
CaseFormat
|
用于不同命名格式之间的转换,例如驼峰命名、大写下划线命名、小写连字符命名等
|
- Strings
Strings类提供了一系列静态方法,用于对字符串进行各种操作,例如判空、拼接、截取、填充等。
主要方法:
方法
|
描述
|
isNullOrEmpty(String)
|
判断字符串是否为null或空字符串。
|
emptyToNull(String)
|
将空字符串转换为null。
|
nullToEmpty(String)
|
将null转换为空字符串。
|
repeat(String, int)
|
指定字符串重复次数。
|
padStart(String, int, char)
|
在字符串的开头填充指定字符到指定长度。
|
padEnd(String, int, char)
|
在字符串的结尾填充指定字符到指定长度。
|
commonPrefix(CharSequence, CharSequence)
|
获取两个字符串的最长公共前缀。
|
commonSuffix(CharSequence, CharSequence)
|
获取两个字符串的最长公共后缀。
|
使用示例:
public static void main(String[] args) {
boolean b1 = Strings.isNullOrEmpty("");
System.out.println("字符串是否为null或空字符串:" +b1);
String b2 = Strings.emptyToNull("aa");
System.out.println("将空字符串转换为null:" +b2);
String b3 = Strings.emptyToNull("");
System.out.println("将空字符串转换为null:" +b3);
String b4 = Strings.repeat("123", 5);
System.out.println("指定字符串重复次数:" +b4);
String b5 = Strings.padStart("99", 5, '0');
System.out.println("在字符串的开头填充指定字符到指定长度:" +b5);
String b6 = Strings.padEnd("99", 5, '0');
System.out.println("在字符串的结尾填充指定字符到指定长度:" +b6);
String b7 = Strings.commonPrefix("abc666", "ab1555");
System.out.println("获取两个字符串的最长公共前缀:" +b7);
String b8 = Strings.commonSuffix("sds", "dfh345sds");
System.out.println("获取两个字符串的最长公共后缀:" +b8);
}
日志
字符串是否为null或空字符串:true
将空字符串转换为null:aa
将空字符串转换为null:null
指定字符串重复次数:123123123123123
在字符串的开头填充指定字符到指定长度:00099
在字符串的结尾填充指定字符到指定长度:99000
获取两个字符串的最长公共前缀:ab
获取两个字符串的最长公共后缀:sds
- Joiner
Joiner类用于将多个元素连接成一个字符串,并且可以指定连接符和处理null值的方式。
主要方法:
方法
|
描述
|
on(char)
|
指定分隔符。
|
join(Iterable)
|
将可迭代对象中的元素连接成一个字符串。
|
join(Object[])
|
将对象数组连接成一个字符串。
|
join(Object…)
|
将多个对象连接成一个字符串。
|
skipNulls()
|
忽略null值。
|
useForNull(String)
|
指定在连接过程中将null值替换为指定字符串。
|
使用示例:
public static void main(String[] args) {
String s1 = Joiner.on(",").join(Arrays.asList("A", "B", "C"));
System.out.println("将可迭代对象中的元素连接成一个字符串:"+s1);
String s2 = Joiner.on(",").join(Stream.of("A", "B", "C").toArray());
System.out.println("将数组连接成一个字符串:"+s2);
String s3 = Joiner.on(",").join("A", "B", "C");
System.out.println("将可变参数连接成一个字符串:"+s3);
String s4 = Joiner.on(",").useForNull("666").join("A", "B", null, "C");
System.out.println("连接过程将null值替换为指定字符串:"+s4);
String s5 = Joiner.on(",").skipNulls().join("A", "B", null, "C");
System.out.println("连接过程忽略null值:"+s5);
}
日志
已连接到目标 VM, 地址: ''127.0.0.1:56398',传输: '套接字''
将可迭代对象中的元素连接成一个字符串:A,B,C
将数组连接成一个字符串:A,B,C
将可变参数连接成一个字符串:A,B,C
连接过程将null值替换为指定字符串:A,B,666,C
连接过程忽略null值:A,B,C
- Splitter
Splitter类用于将一个字符串分割成多个部分,可以指定分隔符和分割结果的处理方式。
主要方法:
方法
|
描述
|
on(char separator)
|
指定单个字符作为分隔符。
|
on(CharMatcher separatorMatcher)
|
使用 CharMatcher 指定分隔符。
|
on(final String separator)
|
指定字符串作为分隔符。
|
on(Pattern separatorPattern)
|
使用正则表达式指定分隔符进行分割。
|
onPattern(String separatorPattern)
|
使用正则表达式指定分隔符进行分割。
|
omitEmptyStrings()
|
忽略结果中的空字符串。
|
trimResults()
|
去除结果字符串的前导和尾部空白字符。
|
trimResults(CharMatcher trimmer)
|
使用 CharMatcher 去除结果字符串的前导和尾部空白字符。
|
limit(int)
|
限制分割的结果数量。
|
withKeyValueSeparator(String separator)
|
用于指定键值对的分隔符。
|
withKeyValueSeparator(char separator)
|
用于指定键值对的分隔符。
|
withKeyValueSeparator(Splitter keyValueSplitter)
|
用于指定键值对的分隔符。
|
split(final CharSequence sequence)
|
将字符序列分割为多个部分。
|
splitToList(CharSequence sequence)
|
将字符序列分割为列表形式的结果。
|
splitToStream(CharSequence sequence)
|
将字符序列分割为流形式的结果。
|
使用示例:
public static void main(String[] args) {
// 指定逗号作为分隔符,并忽略空字符串和去除前导和尾部空白字符
String input = "apple, banana, ,orange, ";
Iterable<String> result = Splitter.on(',')
.omitEmptyStrings()
.trimResults()
.split(input);
for (String s : result) {
System.out.println(s);
}
System.out.println("------------------------------------------");
// 使用正则表达式作为分隔符,并将字符串分割为数字部分和非数字部分
input = "a1b2c3d4e5";
result = Splitter.onPattern("\\d")
.split(input);
for (String s : result) {
System.out.println(s);
}
}
日志
apple
banana
orange
------------------------------------------
a
b
c
d
e
- CharMatcher
CharMatcher类用于对字符进行匹配和操作。
主要方法:
方法
|
描述
|
anyOf(String chars)
|
匹配给定字符串中的任意字符。
|
inRange(char startInclusive, char endInclusive)
|
匹配在给定范围内的字符。
|
is(char match)
|
匹配与给定字符相同的字符。
|
isNot(char match)
|
匹配与给定字符不同的字符。
|
whitespace()
|
匹配空白字符。
|
collapseFrom(CharSequence sequence, char replacement)
|
将匹配的字符替换为给定的字符。
|
retainFrom(CharSequence sequence)
|
保留匹配的字符,删除其他字符。
|
removeFrom(CharSequence sequence)
|
删除匹配的字符。
|
matchesAllOf(CharSequence sequence)
|
判断字符序列是否完全匹配 CharMatcher。
|
countIn(CharSequence sequence)
|
统计字符序列中匹配的字符数量。
|
trimFrom(CharSequence sequence)
|
删除字符序列开头和结尾的匹配字符。
|
trimLeadingFrom(CharSequence sequence)
|
删除字符序列开头的匹配字符。
|
trimTrailingFrom(CharSequence sequence)
|
删除字符序列结尾的匹配字符。
|
replaceFrom(CharSequence sequence, char replacement)
|
将匹配的字符替换为给定的字符。
|
trimAndCollapseFrom(CharSequence sequence, char replacement)
|
删除字符序列开头和结尾的匹配字符,并将连续的匹配字符替换为给定的字符。
|
replaceFrom(CharSequence sequence, char replacement)
|
将匹配的字符替换为给定的字符。
|
matchesNoneOf(CharSequence sequence)
|
判断字符序列是否没有匹配 CharMatcher。
|
indexIn(CharSequence sequence)
|
返回第一个匹配字符的索引。
|
indexOf(CharSequence sequence, int start)
|
返回从指定索引开始的第一个匹配字符的索引。
|
lastIndexIn(CharSequence sequence)
|
返回最后一个匹配字符的索引。
|
or(CharMatcher other)
|
返回一个新的 CharMatcher,其匹配条件是原始 CharMatcher 和另一个 CharMatcher 条件的逻辑或关系。
|
and(CharMatcher other)
|
返回一个新的 CharMatcher,其匹配条件是原始 CharMatcher 和另一个 CharMatcher 条件的逻辑与关系。
|
negate()
|
返回一个新的 CharMatcher,其匹配条件是原始 CharMatcher 的否定。
|
使用示例:
public static void main(String[] args) {
String testString = "abc 123 def 456 ghi 789";
// 匹配给定字符串中的任意字符
CharMatcher anyOfMatcher = CharMatcher.anyOf("aeiou");
System.out.println(anyOfMatcher.removeFrom(testString)); // 输出 bc 123 df 456 gh 789
// 匹配在给定范围内的字符
CharMatcher inRangeMatcher = CharMatcher.inRange('a', 'f');
System.out.println(inRangeMatcher.removeFrom(testString)); // 输出 def 456 ghi 789
// 匹配与给定字符相同的字符
CharMatcher isMatcher = CharMatcher.is('o');
System.out.println(isMatcher.countIn(testString)); // 输出 0
// 匹配与给定字符不同的字符
CharMatcher isNotMatcher = CharMatcher.isNot(' ');
System.out.println(isNotMatcher.removeFrom(testString)); // 输出 abc123def456ghi789
// 匹配空白字符
CharMatcher whitespaceMatcher = CharMatcher.whitespace();
System.out.println(whitespaceMatcher.trimFrom(testString)); // 输出 "abc 123 def 456 ghi 789"
// 将匹配的字符替换为给定的字符
CharMatcher digitMatcher = CharMatcher.digit();
System.out.println(digitMatcher.replaceFrom(testString, '*')); // 输出 "abc *** def *** ghi ***"
// 统计字符序列中匹配的字符数量
CharMatcher anyMatcher = CharMatcher.any();
System.out.println(anyMatcher.countIn(testString)); // 输出 20
// 删除字符序列开头和结尾的匹配字符
CharMatcher trimMatcher = CharMatcher.is(' ');
System.out.println(trimMatcher.trimFrom(testString)); // 输出 "abc 123 def 456 ghi 789"
// 删除字符序列开头的匹配字符
CharMatcher leadingMatcher = CharMatcher.is('a');
System.out.println(leadingMatcher.trimLeadingFrom(testString)); // 输出 "bc 123 def 456 ghi 789"
// 删除字符序列结尾的匹配字符
CharMatcher trailingMatcher = CharMatcher.is('9');
System.out.println(trailingMatcher.trimTrailingFrom(testString)); // 输出 "abc 123 def 456 ghi 78"
// 将匹配的字符替换为给定的字符
CharMatcher replaceMatcher = CharMatcher.anyOf("aeiou");
System.out.println(replaceMatcher.replaceFrom(testString, '*')); // 输出 "*b*c 123 d*f 456
// 将字符序列中的多个连续匹配字符缩减为一个字符
CharMatcher duplicateMatcher = CharMatcher.is(' ');
String collapsedString = duplicateMatcher.collapseFrom(testString, ' ');
System.out.println(collapsedString); // 输出 "abc 123 def 456 ghi 789"
// 判断字符序列是否不包含任何匹配字符
System.out.println(whitespaceMatcher.matchesNoneOf(testString)); // 输出 false
}
日志:
bc 123 df 456 gh 789
123 456 ghi 789
0
abc 123 def 456 ghi 789
abc *** def *** ghi ***
23
abc 123 def 456 ghi 789
bc 123 def 456 ghi 789
abc 123 def 456 ghi 78
*bc 123 d*f 456 gh* 789
abc 123 def 456 ghi 789
false
- CaseFormat
CaseFormat类用于不同命名格式之间的转换,例如驼峰命名、大写下划线命名、小写连字符命名等。
CaseFormat 支持的命名约定和格式包括:
-
LOWER_CAMEL:首字母小写驼峰命名
-
UPPER_CAMEL:首字母大写驼峰命名
-
LOWER_UNDERSCORE:下划线小写命名
-
UPPER_UNDERSCORE:下划线大写命名
-
LOWER_HYPHEN:连字符小写命名
主要方法:
方法名
|
描述
|
String to(CaseFormat format, String str)
|
将给定格式的字符串转换为另一种格式
|
使用示例:
public static void main(String[] args) {
// 首字母小写驼峰 转换为 下划线大写
String s1 = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, "userId");
System.out.println(s1);
// 下划线大写 转换为 连字符小写
String s2 = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, "USER_ID");
System.out.println(s2);
// 连字符小写 转换为 首字母大写驼峰
String s3 = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, "user-id");
System.out.println(s3);
}
日志
USER_ID
user-id
UserId