文章目录
- 字符串工具
-
- [- Strings](#- Strings)
- [- Joiner](#- Joiner)
- [- Splitter](#- Splitter)
- [- CharMatcher](#- CharMatcher)
- [- CaseFormat](#- CaseFormat)
字符串工具
工具类 | 描述 |
---|---|
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) | 获取两个字符串的最长公共后缀。 |
使用示例:
java
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);
}
日志
java
字符串是否为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值替换为指定字符串。 |
使用示例:
java
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);
}
日志
java
已连接到目标 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) | 将字符序列分割为流形式的结果。 |
使用示例:
java
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);
}
}
日志
java
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 的否定。 |
使用示例:
java
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
}
日志:
java
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) | 将给定格式的字符串转换为另一种格式 |
使用示例:
java
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);
}
日志
java
USER_ID
user-id
UserId