文章7 | 阅读 2761 | 点赞0
Guava提供几个好用的String工具类,能很方便的处理字符串,分享给大家
Joiner是用来连接字符串的,它能以指定的字符对多个字符串进行连接
比如,我们要将一个List中的元素用逗号连接起来,这是日常开发中很常见的逻辑处理,那以前我们可能会这样写
List<String> list = Lists.newArrayList("a","b","c");
StringBuffer buffer = new StringBuffer();
for(int i = 0; i < list.size(); i++){
if(i > 0){
buffer.append(",");
}
buffer.append(list.get(i));
}
System.out.println(buffer.toString());
下面我们看一下Joiner中的写法
String str = Joiner.on(",").join(Lists.newArrayList("a","b","c"));
System.out.println(str);
可以看到,Joiner用一行代码就完成了list中各个元素的拼接,除了这些还可以跳过空元素,还可以连接map中的key和value,下面我们来看一下Joiner的详细用法
@Test
public void joinerTest(){
//Join可以连接list、数组中的元素
String str = Joiner.on(",").join(Lists.newArrayList("a","b","c"));
String str1 = Joiner.on("#").join(new String[]{"a","b","c"});
//指定第一个、第二个字符串,再跟list中的元素进行连接
String str2 = Joiner.on("@").join("first","second",Lists.newArrayList("a","b","c"));
System.out.println(str);
System.out.println(str);
//跳过list中的空值,这里的空值是指null,并不包括空字符串
String str3 = Joiner.on(",").skipNulls().join(Lists.newArrayList("a","b"," ",null,"c",null));
System.out.println(str3);
//useForNull(str)用指定的字符串来替换空值
String str4 = Joiner.on(",").useForNull("#").join(Lists.newArrayList("a","b"," ",null,"c",null));
System.out.println(str4);
Map<String,String> map = Maps.newHashMap();
map.put("a","1");
map.put("b","2");
map.put("c","3");
//withKeyValueSeparator用:来连接map的key和value,再将连接好的key和value用逗号分隔
String str5 = Joiner.on(",").withKeyValueSeparator(":").join(map);
System.out.println(str5);
}
Splitter用于字符串的分隔,与Joiner正好是相反的操作
@Test
public void splitterTest(){
List<String> list = Splitter.on(",").splitToList("a,b,c,d");
System.out.println(list);
Splitter.on(",").split("a,b,c,d").forEach( s -> {
System.out.println(s);
});
//过滤掉空字符串,但不包括空格
List<String> list1 = Splitter.on(",").omitEmptyStrings().splitToList("a,b,, ,c,d");
System.out.println("list1:" + list1); //输出:[a, b, ,c, d]
//去掉字符串中的空格,再进行过滤空元素
List<String> list2 = Splitter.on(",").omitEmptyStrings().trimResults().splitToList("a,b,, ,c,d");
System.out.println("list2:" + list2); //输出 [a, b, c, d]
//limit表示最多把字符串分隔成多少份
List<String> list3 = Splitter.on("#").omitEmptyStrings().trimResults().limit(2).splitToList("a#b#c#d");
System.out.println("list3:" + list3);
//将字串还原成map,是Joiner的逆向操作,注意:字符串的格式必须满足“a:1#b:2”这种格式,格式不对会导致还原map失败
Map<String,String> map = Splitter.on("#").omitEmptyStrings().trimResults().withKeyValueSeparator(":").split("a:1#b:2");
System.out.println("map:" + map);
}
可以看出来,Splitter就是Joiner的逆向操作
Joiner是将字符串拼接起来,Splitter是将字符串拆分
CharMatcher用来处理复杂的字符串操作,它其实主要解决两个问题:
基本上这两个操作就包含了日常开发中的大部分需求
CharMatcher可以对匹配到的字符串做出多种处理,比如,remove(), replace(), trim(), retain()等等
下面我们举个例子吧
比如,你要提取出“er 3j6o 3k ,)$ wt@ wr4576je ow3453535345irjew jwfel ” 这个字符串中的数字,或者去掉这个字符串中的字母,你要怎么处理,用CharMatcher来处理就很简单
提取字符串中的小写字母
String s = "er 3j6o 3k ,)$ wt@ wr4576je ow3453535345irjew jwfel ";
//返回只保留a-z的字母的字符中
String str = CharMatcher.inRange('a','z').retainFrom(s);
System.out.println(str);
去掉字符串中的数字
String s = "er 3j6o 3k ,)$ wt@ wr4576je ow3453535345irjew jwfel ";
//去掉字符串中数字
String str = CharMatcher.digit().removeFrom(s);
System.out.println(str);
CharMatcher常用的方法分为两类:
1、用来做匹配的方法
2、用来处理匹配结果的方法
下面来看一下代码
@Test
public void charMatcherTest(){
String str = "aj\tld1\b23aAbCs kF45JAb c56sl";
//移除str中的a
CharMatcher.is('a').removeFrom(str);
//移除str中的a
CharMatcher.isNot('a').retainFrom(str);
//保留str中的a,b,c字符
CharMatcher.anyOf("abc").retainFrom(str);
//保留str中的a,b,c字符
CharMatcher.noneOf("abc").removeFrom(str);
//匹配str中的a-j的字母,全部替换成数字6
CharMatcher.inRange('a','j').replaceFrom(str,"6");
//去str中的空格
CharMatcher.breakingWhitespace().removeFrom(str);
//去掉str中的数字
CharMatcher.digit().removeFrom(str);
//去掉控制字符(\t,\n,\b...)
CharMatcher.javaIsoControl().removeFrom(str);
//获取str中的小写字母
CharMatcher.javaLowerCase().retainFrom(str);
//获取str中的大写字母
CharMatcher.javaUpperCase().retainFrom(str);
//组合条件:获取str中的大写字母和数字
System.out.println(CharMatcher.javaUpperCase().or(CharMatcher.digit()).retainFrom(str));
}
这个CharMatcher简直太好用了,能实现各种复杂的字符串匹配和处理
当然,你也可以使用正则表达式实现同样的功能,但毕竟正则表达式不够直观
CharMatcher可以通过方法名一眼就可以看出来
Charsets定义了字符编码的常量
CaseFormat是一种实用工具类,以提供不同的ASCII字符格式之间的转换
可以用CaseFormat进行驼峰规则转换,比如,将hello_world转换成helloWorld或HelloWorld
String str = "hello_world";
CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL,str);//转换成helloWorld
CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL,str);//转换成HelloWorld
可以看到,Guava提供的String类的工具都超级实用的,能在平时的开发中节省我们不少时间和代码量
熟练掌握这些工具,能让我们平时的工作如虎添翼,加油吧~ 骚年
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/pzjtian/article/details/106844856
内容来源于网络,如有侵权,请联系作者删除!