guava 常用工具类
字符处理
CaseFormat 命名格式转换
用于在不同的命名格式之间进行转换。常见的命名格式包括下划线分隔(如 LOWER_UNDERSCORE
)、驼峰命名(如 LOWER_CAMEL
和 UPPER_CAMEL
)、中划线分隔(如 LOWER_HYPHEN
)等。
以下是 CaseFormat
支持的几种命名格式:
- LOWER_HYPHEN(如 lower-hyphen)
- LOWER_UNDERSCORE(如 lower_underscore)
- LOWER_CAMEL(如 lowerCamel)
- UPPER_CAMEL(如 UpperCamel)
- UPPER_UNDERSCORE(如 UPPER_UNDERSCORE)
// 示例字符串
String lowerUnderscore = "example_string";
String lowerHyphen = "example-string";
String lowerCamel = "exampleString";
String upperCamel = "ExampleString";
String upperUnderscore = "EXAMPLE_STRING";
// 下划线分隔 -> 驼峰命名
String result1 = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, lowerUnderscore);
System.out.println("LOWER_UNDERSCORE to LOWER_CAMEL: " + result1);
// 中划线分隔 -> 下划线分隔
String result2 = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_UNDERSCORE, lowerHyphen);
System.out.println("LOWER_HYPHEN to LOWER_UNDERSCORE: " + result2);
// 驼峰命名 -> 大写驼峰命名
String result3 = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, lowerCamel);
System.out.println("LOWER_CAMEL to UPPER_CAMEL: " + result3);
// 大写驼峰命名 -> 下划线分隔
String result4 = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, upperCamel);
System.out.println("UPPER_CAMEL to LOWER_UNDERSCORE: " + result4);
// 大写下划线分隔 -> 小写中划线分隔
String result5 = CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, upperUnderscore);
System.out.println("UPPER_UNDERSCORE to LOWER_HYPHEN: " + result5);
CharMatcher 字符串的匹配与过滤
用于处理字符和字符串的匹配与过滤。CharMatcher
提供了一种方便的方式来匹配、过滤、替换字符串中的字符,支持多种预定义的匹配器(如匹配字母、数字、空白字符等)以及自定义匹配器。
以下是一些常用的 CharMatcher
方法和预定义的匹配器:
CharMatcher.any()
: 匹配任何字符。CharMatcher.none()
: 不匹配任何字符。CharMatcher.whitespace()
: 匹配空白字符(空格、制表符等)。CharMatcher.digit()
: 匹配数字字符。CharMatcher.javaLetter()
: 匹配 Java 字母字符。CharMatcher.javaDigit()
: 匹配 Java 数字字符。CharMatcher.is(char c)
: 匹配指定的字符。CharMatcher.isNot(char c)
: 匹配不是指定的字符。CharMatcher.inRange(char startInclusive, char endInclusive)
: 匹配指定范围内的字符。
以下是一些常用的操作方法:
retainFrom(CharSequence sequence)
: 保留匹配的字符。removeFrom(CharSequence sequence)
: 移除匹配的字符。replaceFrom(CharSequence sequence, char replacement)
: 替换匹配的字符。collapseFrom(CharSequence sequence, char replacement)
: 将连续匹配的字符替换为单个字符。trimFrom(CharSequence sequence)
: 去除字符串前后的匹配字符。
String input = "This is a sample text, 1234!";
// 保留数字字符
String digitsOnly = CharMatcher.digit().retainFrom(input);
System.out.println("Digits only: " + digitsOnly); // 输出: 1234
// 移除空白字符
String noWhitespace = CharMatcher.whitespace().removeFrom(input);
System.out.println("No whitespace: " + noWhitespace); // 输出: Thisisasampletext,1234!
// 将所有字母转换为大写
String upperCaseLetters = CharMatcher.javaLetter().replaceFrom(input, c -> Character.toUpperCase(c));
System.out.println("Upper case letters: " + upperCaseLetters); // 输出: THIS IS A SAMPLE TEXT, 1234!
// 将连续的空白字符替换为单个空格
String collapsedWhitespace = CharMatcher.whitespace().collapseFrom(input, ' ');
System.out.println("Collapsed whitespace: " + collapsedWhitespace); // 输出: This is a sample text, 1234!
// 去除字符串前后的标点符号
String trimPunctuation = CharMatcher.javaLetterOrDigit().negate().trimFrom(input);
System.out.println("Trim punctuation: " + trimPunctuation); // 输出: This is a sample text, 1234
// 自定义匹配器:匹配所有小写字母
CharMatcher lowerCaseMatcher = CharMatcher.inRange('a', 'z');
String lowerCaseLetters = lowerCaseMatcher.retainFrom(input);
System.out.println("Lower case letters: " + lowerCaseLetters); // 输出: hisisasampletext
Converter 类型转换
用于在两种类型之间进行转换。Converter
提供了一种类型安全的方式来实现双向转换,可以定义从类型 A 到类型 B 的转换逻辑,以及从类型 B 到类型 A 的逆向转换逻辑。
以下是 Converter
类的一些关键方法:
doForward(A a)
: 将类型 A 转换为类型 B。doBackward(B b)
: 将类型 B 转换为类型 A。convert(A a)
: 调用doForward
方法进行转换。reverse()
: 返回一个新的Converter
,其转换逻辑与当前Converter
相反。andThen(Converter<B, C> other)
: 返回一个组合转换器,先应用当前转换器再应用other
转换器。
import com.google.common.base.Converter;
public class ConverterExample {
public static void main(String[] args) {
// 创建一个字符串到整数的转换器
Converter<String, Integer> stringToIntegerConverter = new Converter<String, Integer>() {
@Override
protected Integer doForward(String s) {
return Integer.valueOf(s);
}
@Override
protected String doBackward(Integer integer) {
return integer.toString();
}
};
// 使用转换器进行正向转换
String str = "1234";
Integer intValue = stringToIntegerConverter.convert(str);
System.out.println("String to Integer: " + intValue); // 输出: 1234
// 使用转换器进行反向转换
String reversedStr = stringToIntegerConverter.reverse().convert(intValue);
System.out.println("Integer to String: " + reversedStr); // 输出: 1234
// 创建一个小写到大写的转换器
Converter<String, String> lowerToUpperConverter = new Converter<String, String>() {
@Override
protected String doForward(String s) {
return s.toUpperCase();
}
@Override
protected String doBackward(String s) {
return s.toLowerCase();
}
};
// 组合转换器:先将字符串转换为整数,再将整数转换为大写字符串
Converter<String, String> combinedConverter = stringToIntegerConverter.andThen(new Converter<Integer, String>() {
@Override
protected String doForward(Integer integer) {
return "Number: " + integer;
}
@Override
protected Integer doBackward(String s) {
return Integer.valueOf(s.replace("Number: ", ""));
}
});
// 使用组合转换器进行转换
String combinedResult = combinedConverter.convert(str);
System.out.println("Combined Converter Result: " + combinedResult); // 输出: Number: 1234
// 使用组合转换器进行反向转换
String originalStr = combinedConverter.reverse().convert(combinedResult);
System.out.println("Original String: " + originalStr); // 输出: 1234
}
}
Defaults 默认值
com.google.common.base.Defaults
是 Google Guava 库中的一个类,用于提供 Java 基本数据类型和一些常见对象类型的默认值。这个类主要用在需要默认值的场景下,比如在反射或者泛型编程中。
boolean defaultBoolean = Defaults.defaultValue(boolean.class);
byte defaultByte = Defaults.defaultValue(byte.class);
char defaultChar = Defaults.defaultValue(char.class);
double defaultDouble = Defaults.defaultValue(double.class);
float defaultFloat = Defaults.defaultValue(float.class);
int defaultInt = Defaults.defaultValue(int.class);
long defaultLong = Defaults.defaultValue(long.class);
short defaultShort = Defaults.defaultValue(short.class);
Joiner 多字符串处理
用于将多个字符串或对象连接成一个字符串。它提供了一种简洁而强大的方式来处理字符串连接,支持处理 null
值以及指定分隔
常用方法
on(String delimiter)
: 指定分隔符。
skipNulls()
: 跳过 null
值。
useForNull(String nullText)
: 将 null
值替换为指定的字符串。
join(Iterable<?> parts)
: 将集合中的元素连接成一个字符串。
join(Object[] parts)
: 将数组中的元素连接成一个字符串。
join(Object first, Object second, Object... rest)
: 将多个参数连接成一个字符串。
Splitter 字符串拆分
用于将字符串拆分为子字符串。它提供了比 String.split
更加灵活和强大的功能,支持多种拆分模式和选项,例如去除空白字符串、去除结果中的空格、限制拆分结果的数量等。
常用方法
-
基础拆分:
Splitter.on(char separator)
: 基于单个字符进行拆分。Splitter.on(String separator)
: 基于字符串进行拆分。Splitter.onPattern(String pattern)
: 基于正则表达式进行拆分。Splitter.on(CharMatcher charMatcher)
: 基于CharMatcher
进行拆分。
-
配置选项:
omitEmptyStrings()
: 忽略空字符串。trimResults()
: 去除结果中的空格。trimResults(CharMatcher charMatcher)
: 根据CharMatcher
去除结果中的字符。limit(int limit)
: 限制拆分结果的数量。
-
结果类型:
split(CharSequence sequence)
: 拆分字符串,返回Iterable<String>
。splitToList(CharSequence sequence)
: 拆分字符串,返回List<String>
。splitToMap(CharSequence sequence)
: 将字符串拆分为键值对,返回Map<String, String>
。
Strings 字符串处理
提供了许多静态方法,用于处理和操作字符串。它包含了很多常用的字符串操作方法,可以简化代码并提高可读性。
常用方法
- 空字符串处理:
isNullOrEmpty(String string)
: 检查字符串是否为null
或空。nullToEmpty(String string)
: 将null
转换为空字符串。emptyToNull(String string)
: 将空字符串转换为null
。
- 填充和重复:
padStart(String string, int minLength, char padChar)
: 用指定字符在字符串开头进行填充,使其达到指定长度。padEnd(String string, int minLength, char padChar)
: 用指定字符在字符串末尾进行填充,使其达到指定长度。repeat(String string, int count)
: 重复字符串指定次数。
- 常用方法:
commonPrefix(CharSequence a, CharSequence b)
: 返回两个字符串的公共前缀。commonSuffix(CharSequence a, CharSequence b)
: 返回两个字符串的公共后缀。
集合处理
Lists
常用方法
Lists.newArrayList()
: 创建一个可变的、空的ArrayList
。Lists.newArrayList(E... elements)
: 使用指定的元素创建一个可变的ArrayList
。- **
Lists.newLinkedList():
**创建一个可变的、空的LinkedList
。 Lists.partition(List<T> list, int size)
: 将一个List
分割成若干个子列表,每个子列表的大小为指定的size
。Lists.reverse(List<T> list)
: 返回一个包含相同元素但顺序相反的List
。Lists.transform(List<F> fromList, Function<? super F, ? extends T> function)
: 返回一个新的List
,该列表是通过将给定列表的每个元素传递给给定函数的结果构成的视图。
Maps
常用方法
- **
Maps.newHashMap():
**创建一个空的、可变的HashMap
。 Maps.newHashMapWithExpectedSize(int expectedSize)
: 创建一个具有指定初始容量的HashMap
。- **
Maps.newLinkedHashMap():
**创建一个空的、可变的LinkedHashMap
。 - **
Maps.newTreeMap():
**创建一个空的、可变的TreeMap
。 Maps.newConcurrentMap()
: 创建一个空的、可变的ConcurrentMap
。Maps.uniqueIndex(Iterable<V> values, Function<? super V, K> keyFunction)
: 根据指定的键函数创建一个ImmutableMap
,键是由给定函数生成的。Maps.difference(Map<K, V> left, Map<K, V> right)
: 返回两个Map
的差异视图。
Range 范围
Range
类可以表示一个区间,如 [1, 5],(1, 5],[1, 5),(1, 5) 等等。它支持各种各样的操作,包括检查区间是否包含某个值、区间是否相交、区间的并集和交集等。
常用方法
- **
Range.closed(C lower, C upper):
**创建一个包含下限和上限的范围[lower, upper]
。 Range.closedOpen(C lower, C upper)
:创建一个包含下限但不包含上限的范围[lower, upper)
。Range.openClosed(C lower, C upper)
:创建一个不包含下限但包含上限的范围(lower, upper]
。Range.open(C lower, C upper)
:创建一个不包含下限和上限的范围(lower, upper)
。Range.atLeast(C endpoint)
:创建一个从指定值开始的范围[endpoint, ∞)
。Range.atMost(C endpoint)
:创建一个到指定值为止的范围(-∞, endpoint]
。Range.greaterThan(C endpoint)
:创建一个大于指定值的范围(endpoint, ∞)
。Range.lessThan(C endpoint)
:创建一个小于指定值的范围(-∞, endpoint)
。Range.contains(C value)
:检查范围是否包含指定值。Range.isConnected(Range<C> other)
:检查两个范围是否相连。Range.intersection(Range<C> connectedRange)
:返回两个相连范围的交集。Range.span(Range<C> other)
:返回两个范围的并集。
Set
常用方法
- **
Sets.newHashSet()
**创建一个空的HashSet
。 - **
Sets.newHashSet(E... elements)
**创建一个包含指定元素的HashSet
。 - **
Sets.newHashSetWithExpectedSize(int expectedSize)
**创建一个具有指定初始容量的HashSet
。 - **
Sets.newLinkedHashSet()
**创建一个空的LinkedHashSet
。 - **
Sets.newLinkedHashSet(Iterable<? extends E> elements)
**创建一个包含指定元素的LinkedHashSet
。 - **
Sets.newTreeSet()
**创建一个空的TreeSet
。 - **
Sets.newTreeSet(Comparator<? super E> comparator)
**创建一个带有比较器的空TreeSet
。 - **
Sets.union(Set<E> set1, Set<E> set2)
**返回两个集合的并集。 - **
Sets.intersection(Set<E> set1, Set<E> set2)
**返回两个集合的交集。 - **
Sets.difference(Set<E> set1, Set<E> set2)
**返回第一个集合与第二个集合的差集。 - **
Sets.symmetricDifference(Set<E> set1, Set<E> set2)
**返回两个集合的对称差集。 - **
Sets.cartesianProduct(Set<E>... sets)
**返回多个集合的笛卡尔积。 - **
Sets.powerSet(Set<E> set)
**返回给定集合的幂集。