欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

guava笔记6-Strings 博客分类: guavajava相关

程序员文章站 2024-03-23 15:33:10
...

Guava对String提供了四个工具:

 

(1)Joiner:将数组或者集合元素用指定的分隔符进行连接成一个字符串。
Joiner.on(",").join(Arrays.asList(1, 5, 7)); // returns "1,5,7"
Joiner.on("; ").skipNulls().join("Harry", null, "Ron", "Hermione");

方法说明:
static Joiner    on(char separator) 指定分隔符
static Joiner    on(String separator) 同上

Joiner skipNulls()  join时跳过null值
Joiner useForNull(String nullText)  join时null使用nullText替代

<A extends Appendable> A    appendTo(A appendable, Iterable<?> parts) 使用on指定的分隔符 把parts中的所有元素加到appendable中
<A extends Appendable> A    appendTo(A appendable, Iterator<?> parts)  同上
<A extends Appendable> A    appendTo(A appendable, Object[] parts)  同上
<A extends Appendable> A    appendTo(A appendable, Object first, Object second, Object... rest)  同上
StringBuilder    appendTo(StringBuilder builder, Iterable<?> parts) 同上
StringBuilder    appendTo(StringBuilder builder, Iterator<?> parts) 同上
StringBuilder    appendTo(StringBuilder builder, Object[] parts) 同上
StringBuilder    appendTo(StringBuilder builder, Object first, Object second, Object... rest) 同上

String join(Iterable<?> parts) 使用on指定的分隔符来组合parts成一个字符串
String join(Iterator<?> parts) 同上
String join(Object[] parts) 同上
String join(Object first, Object second, Object... rest) 同上

Joiner.MapJoiner    withKeyValueSeparator(String keyValueSeparator) 这个可以指定keyvalue之间的分隔符,这样可以用来join entries及map了。
如: Joiner.on(";").withKeyValueSeparator(":").join(map);
可以得到  key1:value1;key2:value2的格式

(2)Splitter: 对字符串进行分割,返回集合Iterable<String>或者List<String>
如:
Splitter.on(',')
       .trimResults()
       .omitEmptyStrings()
       .split("foo,bar,,   qux");

方法说明:
static Splitter    fixedLength(int length) 用于将字符串按组分割,每组包含length个字符。例如:Splitter.fixedLength(2).split("abcde")  将返回iterable包含 ["ab", "cd", "e"].

Splitter    limit(int limit) 分割得到limit个元素后,后面的不要了
Splitter    omitEmptyStrings() 分割后的结果中去掉空串“”
static Splitter    on(char separator) 指定分隔符
static Splitter    on(CharMatcher separatorMatcher) 指定分隔符
static Splitter    on(Pattern separatorPattern) 指定分隔符
static Splitter    on(String separator) 指定分隔符
static Splitter    onPattern(String separatorPattern) 指定分隔符
Iterable<String>    split(CharSequence sequence) 执行分割操作
List<String>    splitToList(CharSequence sequence) 执行分割操作
Splitter    trimResults() 去掉头尾空格
Splitter    trimResults(CharMatcher trimmer) 去掉头尾匹配trimmer的字符串
Splitter.MapSplitter     withKeyValueSeparator(char separator) 指定keyvalue之前的分隔符
Splitter.MapSplitter     withKeyValueSeparator(Splitter keyValueSplitter) 指定keyvalue之前的分隔符
Splitter.MapSplitter     withKeyValueSeparator(String separator) 指定keyvalue之前的分隔符

Splitter.MapSplitter可用于分割字符串,得到map。
如:
Map<String,String> map = Splitter.on(";").withKeyValueSeparator(":").split("key1:value1;key2:value2")


(3)CharMatcher:字符串格式化与转换
StringUtil很好用吧,本质上就是对字符串进行格式化,但是随着需求的不断变化,StringUtil的方法总是不断增加,显得很乱。
CharMatcher就是希望更加友好的处理字符串的格式化。
本质上,CharMatcher实现了Predicate<Character>,所以可以用来判断一个字符是否符合CharMatcher的条件。
CharMatcher包含很多既有实现:
ANY     匹配任何字符
NONE    不匹配任何字符
WHITESPACE 匹配空白字符   
BREAKING_WHITESPACE 匹配用于控制打印格式的空白字符
INVISIBLE  匹配不可见字符
DIGIT    匹配ASCII数字0~9
JAVA_LETTER     匹配子母
JAVA_DIGIT    匹配Character.isDigit(c),实际取决于Character.getType(int)是否DECIMAL_DIGIT_NUMBER
JAVA_LETTER_OR_DIGIT     匹配java的字母和数字
JAVA_ISO_CONTROL 匹配Character.isISOControl(char)
JAVA_LOWER_CASE      匹配小写
JAVA_UPPER_CASE     匹配大写
ASCII    匹配ASCII字符
SINGLE_WIDTH 是否单字节字符

除了一些常量定义了常用的CharMatcher,还有些static方法可以生成:
anyOf(CharSequence) 是否包含于CharSequence
noneOf(CharSequence sequence)
is(char) 是否是指定字符
isNot(char) 是否不是指定字符
inRange(char, char) 是在在指定范围内
forPredicate(Predicate<? super Character> predicate) 通过predicate构造CharMatcher

还可以通过与或非操作得到新的CharMatcher:
negate() 非
and(CharMatcher) 与
or(CharMatcher) 或

上面这么多都是介绍怎样得到CharMatcher对象,那CharMatcher对象都有哪些操作呢?
collapseFrom(CharSequence, char) 把符合条件的1个或多个连续字符替换为单个char
matchesAllOf(CharSequence) 判断字符串是否仅仅包含CharMatcher指定的字符
matchesAnyOf(CharSequence sequence) 判断是否包含任意一个
matchesNoneOf(CharSequence sequence) 判断是否完全不包含
removeFrom(CharSequence) 从字符串中去除CharMatcher匹配的字符
retainFrom(CharSequence) 仅保留CharMatcher匹配的字符
trimFrom(CharSequence) 去掉字符串前后匹配CharMatcher的字符
trimAndCollapseFrom(CharSequence sequence, char replacement) 把符合条件的1个或多个连续字符替换为单个char,但是最前面和最后面匹配的直接去掉
trimLeadingFrom(CharSequence sequence) trim前面的
trimTrailingFrom(CharSequence sequence) trim后面的
replaceFrom(CharSequence, CharSequence) 把字符串中匹配CharMatcher的字符用另一个字符串替换
countIn(CharSequence) 判断包含匹配字符的个数
indexIn(CharSequence) 查找第一个匹配字符出现的位置
indexIn(CharSequenc, int) 同上,不过从int的位置开始找起
lastIndexIn(CharSequence sequence) 查找最后一个匹配字符出现的位置
matches(char c) 判断c是否符合
precomputed():返回一个新的CharMatcher,功能跟原来的一样,不过会做一些优化:比如通过反查询,或者提前生成字符集,导致查询更加快速。

(4)Charsets(字符集)与CaseFormat(字符串格式):

做字符转换时建议用Charsets定义的常量指定字符集。
Charsets定义了6种基本的字符集常量:ISO_8859_1,US_ASCII,UTF_16,UTF_16BE,UTF_16LE,UTF_8
CaseFormat枚举定义了5中字符串的格式,包括
LOWER_CAMEL:如:lowerCamel
LOWER_HYPHEN:如:lower-hyphen
LOWER_UNDERSCORE:如:lower_underscore
UPPER_CAMEL:如:UpperCamel
UPPER_UNDERSCORE:如:UPPER_UNDERSCORE
此外,还定义了一个方法to,便于把字符串转化为指定的格式。
CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "CONSTANT_NAME")); // returns "constantName"