[Java]-Guava工具库简介

Guava库提供了丰富的字符串处理工具,如Joiner和Splitter,便于字符串连接和拆分。此外,它还引入了不可变集合、新型集合(如Multiset、Multimap)和RangeSet等,以及强大的缓存机制。本文详细介绍了Guava中关于字符串、集合和缓存的相关操作。


Guava库中包含了一系列方便使用的工具库,如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。

字符串

Guava中提供了丰富的字符串分割、连接、填充方法。

Jointer

用分隔符将多个**字符串(或数组元素)**连接成一个字符串:

  1. on(String):静态工厂方法,生成一个新的 Joiner 对象,参数为连接符;
  2. skipNulls():如果元素为空,则跳过;
  3. useForNull(String):如果元素为空,则用这个字符串代替;
  4. join(数组/链表):要连接的数组/链表;
  5. appendTo(String,数组/链表):在第一个参数后面新加上 拼接后的字符串;
  6. withKeyValueSeparator(String):得到 MapJoiner,Map键、值的连接符;
List<String> lstTest = Arrays.asList("aa", "bb", "cc", null, "dd");
System.out.println(Joiner.on("; ").useForNull("<null>").join(lstTest)); // aa; bb; cc; <null>; dd

Map map = ImmutableMap.of("k1", "v1", "k2", "v2");
System.out.println(Joiner.on("; ").withKeyValueSeparator("=").join(map)); // k1=v1; k2=v2

Splitter

Splitter 将一个字符串按照分隔符生成字符串集合。

String strList = "aa; bb; cc; <null>; dd";
System.out.println(Splitter.on(";").trimResults().split(strList)); // [aa, bb, cc, <null>, dd]

String strMap = "k1=v1; k2=v2";
System.out.println(Splitter.on(";").trimResults().withKeyValueSeparator("=").split(strMap)); // {k1=v1, k2=v2}

拆分器工厂

方法 描述 范例
Splitter.on(char) 按单个字符拆分 Splitter.on(‘;’)
Splitter.on(CharMatcher) 按字符匹配器拆分 Splitter.on(CharMatcher.BREAKING_WHITESPACE)
Splitter.on(String) 按字符串拆分 Splitter.on(“, “)
Splitter.on(Pattern) Splitter.onPattern(String) 按正则表达式拆分 Splitter.onPattern(“\r?\n”)
Splitter.fixedLength(int) 按固定长度拆分;最后一段可能比给定长度短,但不会为空。 Splitter.fixedLength(3)
Splitter.fixedLength(3).split("1234567");
// [123, 456, 7]

拆分器修饰符

方法 描述
omitEmptyStrings() 从结果中自动忽略空字符串
trimResults() 移除结果字符串的前导空白和尾部空白
trimResults(CharMatcher) 给定匹配器,移除结果字符串的前导匹配字符和尾部匹配字符
limit(int) 限制拆分出的字符串数量

CharMatcher

CharMatcher(只处理char类型代表的字符)提供了一系列方法对字符作特定类型的操作:修剪[trim]、折叠[collapse]、移除[remove]、保留[retain]等等。

工厂方法

方法 描述
anyOf(CharSequence) 枚举匹配字符。如CharMatcher.anyOf(“aeiou”)匹配小写英语元音
is(char) 匹配指定字符
isNot(char) 不匹配指定字符
noneOf(CharSequence) 等价anyOf(sequence).negate()
inRange(char, char) 给定字符范围匹配,如CharMatcher.inRange(‘a’, ‘z’)

CharMatcher还可通过negate()、and(CharMatcher)和or(CharMatcher)方法组合。

操作方法

CharMatcher提供了多种多样的方法操作CharSequence中的特定字符:

方法 描述
collapseFrom(CharSequence, char) 把连续的匹配字符替换为特定字符
matchesAllOf(CharSequence)
matchesAnyOf
matchesNoneOf
测试字符序列的匹配
removeFrom(CharSequence) 从字符序列中移除所有匹配字符
retainFrom(CharSequence) 在字符序列中保留匹配字符,移除其他字符
trimFrom(CharSequence)
trimLeadingFrom
trimTrailingFrom
移除字符序列的前导匹配字符、尾部匹配字符
replaceFrom(CharSequence, CharSequence) 用特定字符序列替代匹配字符
countIn(CharSequence) 统计目标字符出现次数
indexIn
lastIndexIn
查找字符出现位置
String strAll = " a   b   c def  ";
CharMatcher spaceMatcher = CharMatcher.whitespace();
System.out.println(strAll);
String result = spaceMatcher.collapseFrom(strAll, ' ');
System.out.println(result);
result = spaceMatcher.removeFrom(strAll);
System.out
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值