Guava(六)

13 篇文章 0 订阅

目录

【字符串处理】
一、Joiner 连接器
    Joiner用于将字符串序列通过指定的分隔符连接起来,另外通过一些属性的设置可以让字符串的连接变的更简单。

String join = Joiner.on(",").skipNulls().join(Lists.newArrayList(1, 2, null, 3)); // 1,2,3

Joiner.on(";").useForNull("-1").appendTo(new StringBuilder(join), Lists.newArrayList(4, 5, null)); // 1,2,34;5;-1

Joiner 通过静态方法 on() 构造实例,通过 join() 对字符串进行连接,返回 String。

方法名说明
Joiner.on(String)按给定字符串拼接
Joiner.on(char)按给定字符拼接
useForNull(String)拼接字符串时按给定字符串替换null
skipNulls()拼接字符串时忽略null
join(Iterable)拼接Iterable
join(Iterator)拼接Iterator
join(Object[])拼接Object数组
join(Object, Object, Object…)按参数拼接
appendTo(A extends Appendable, …)在A后拼接字符串
appendTo(StringBuilder, …)在StringBuilder后拼接字符串

注:
1、join 方法最终是通过调用 appendTo 方法来实现的,因此 appendTo 方法中的‘…’是 join 中传来的参数类型。
2、joiner实例总是不可变的。用来定义joiner目标语义的配置方法总会返回一个新的joiner实例,这使得joiner实例都是线程安全的。

二、Splitter 拆分器
    首先比较下JDK自带的字符串分割方法和Splitter:

String string = "; 1;2;;;; 24 ;";
System.out.println(Arrays.toString(string.split(";")));
System.out.println(Splitter.on(";").trimResults().omitEmptyStrings().split(string));

// JDK method: [,  1, 2, , , ,  24 ]
// Guava method: [1, 2, 24]

比较下发现一个奇特的现象,split方法丢掉了最后一个分隔符,而保留了第一个,这显然不能满足特定条件下的需求。因此,再是来看下Splitter的工具:

方法名说明
Splitter.on(char)按给定字符拆分
Splitter.on(CharMatcher)按给定字符匹配器拆分(下面会提到)
Splitter.on(String)按给定字符串拆分
Splitter.on(Pattern), Splitter.onPattern(String)按正则表达式拆分
Splitter.fixedLength(int)按固定长度拆分
omitEmptyStrings()去掉结果中的空字符串
limit(int)限制拆分出的字符串数量
trimResults移除结果字符串的前导空白和尾部空白
trimResults(CharMatcher)给定匹配器,移除结果字符串的前导匹配字符和尾部匹配字符
split(CharSequence)拆分指定字符串
splitToList(CharSequence)将拆分的字符串转为List

注:splitter实例总是不可变的。用来定义splitter目标语义的配置方法总会返回一个新的splitter实例,这使得splitter实例都是线程安全的。

三、CharMatcher 字符匹配
    CharMatcher的提供了一系列方法,可以对字符作特定类型的操作:修剪[trim]、折叠[collapse]、移除[remove]、保留[retain]等等。

CharMatcher实例首先代表概念
  1:怎么才算匹配字符?然后它还提供了很多操作概念
  2:如何处理这些匹配字符?
这样的设计使得API复杂度的线性增加可以带来灵活性和功能两方面的增长。

CharMatcher中的常量可以满足大多数字符匹配需求:

----
ANYNONEWHITESPACBREAKING_WHITESPACE
INVISIBLEDIGITJAVA_LETTERJAVA_DIGIT
JAVA_LETTER_OR_DIGITJAVA_ISO_CONTROLJAVA_LOWER_CASEJAVA_UPPER_CASE
ASCIISINGLE_WIDTH

其他获取字符匹配器的常见方法:

方法说明
anyOf(CharSequence)枚举匹配字符
is(char)给定单一字符匹配
inRange(char, char)给定字符范围匹配
negate()不按给定字符匹配
and(CharMatcher)满足当前匹配和给定匹配的条件
or(CharMatcher)满足当前匹配或给定匹配的条件

使用字符匹配器方法:

方法说明
collapseFrom(CharSequence, char)把每组连续的匹配字符替换为特定字符
matchesAllOf(CharSequence)测试是否字符序列中的所有字符都匹配
removeFrom(CharSequence)从字符序列中移除所有匹配字符
retainFrom(CharSequence)在字符序列中保留匹配字符,移除其他字符
trimFrom(CharSequence)移除字符序列的前导匹配字符和尾部匹配字符
replaceFrom(CharSequence, CharSequence)用特定字符序列替代匹配字符
String sequence = "1. the  banana  is  bend";
CharMatcher.anyOf("abcd").retainFrom(sequence);               // baaabd
CharMatcher.is('a').retainFrom(sequence);                     // aaa
CharMatcher.inRange('b', 'e').retainFrom(sequence);           // ebbed
CharMatcher.inRange('b', 'e').negate().retainFrom(sequence);  // 1. th  anana  is  n
CharMatcher.is('a').and(CharMatcher.inRange('a', 'b')).retainFrom(sequence);  // aaa
CharMatcher.is('a').or(CharMatcher.is('b')).retainFrom(sequence);             // baaab
CharMatcher.WHITESPACE.collapseFrom(sequence, ' ');           // 1. the banana is bend
CharMatcher.JAVA_LETTER.matchesAllOf(sequence);               // false
CharMatcher.ANY.removeFrom(sequence);                         // ""
CharMatcher.DIGIT.trimFrom(sequence);                         // . the  banana  is  bend
CharMatcher.BREAKING_WHITESPACE.replaceFrom(sequence, "");    // 1.thebananaisbend

四、Charsets 字符集
Charsets针对所有Java平台都要保证支持的六种字符集提供了常量引用。尝试使用这些常量,而不是通过名称获取字符集实例。

string.getBytes(Charsets.UTF_8);

五、CaseFormat 大小写格式
CaseFormat被用来方便地在各种ASCII大小写规范间转换字符串——比如,编程语言的命名规范。CaseFormat支持的格式如下:

格式范例
LOWER_CAMELlowerCamel
LOWER_HYPHENlower-hyphen
LOWER_UNDERSCORElower_underscore
UPPER_CAMELUpperCamel
UPPER_UNDERSCOREUPPER_UNDERSCORE
CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, "utf-8") // UTF-8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值