guava笔记6-Strings 博客分类: guavajava相关
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"
推荐阅读
-
guava笔记6-Strings 博客分类: guavajava相关
-
guava笔记9-Ranges 博客分类: guava
-
guava笔记5-并发 博客分类: guavajava相关
-
guava笔记14-Reflection 博客分类: java相关guava
-
guava笔记7-Networking 博客分类: java相关guava
-
guava笔记12-EventBus 博客分类: guavajava相关
-
spring mvc 学习相关资料 博客分类: 读书笔记 springmvc
-
Memory Analysis Tool 使用相关材料整理 博客分类: Java相关技术与应用读书笔记GC MATHprof