guvara是谷歌开源的java工具库,提供了很多高效的类。这里介绍guava中部分常用的字符串操作,更多的操作可查看源码。目前最新版本为27.1-jre。
文档官网地址:https://github.com/google/guava/wiki/StringsExplained
guava最新的jar包版本为27.1-jre。使用中可添加maven依赖:
com.google.guava
guava
27.1-jre
Joiner类用于字符串连接,可对数组、List、Map等连接为字符串,常用方法有:
方法 | 使用 |
---|---|
on() | 指定连接符 |
skipNulls() | 忽略null |
useForNull() | 对null使用替代符 |
withKeyValueSeparator() | 键值对中(map中)的分隔符 |
join() | 需连接的对象(list、map等 |
示例如下:
//字符串连接,skipNulls去掉null
String s1 = Joiner.on(",").skipNulls().join("one", null, "tow");
//字符串连接,useForNull对null使用默认值代替
String s2 = Joiner.on(",").useForNull("default").join("one", null, "tow");
//map转为字符串连接,on为entry间分隔符,withKeyValueSeparator为kev和value间分隔符
String s3 = Joiner.on("&").withKeyValueSeparator("=").join(ImmutableMap.of("one", "1", "two", "2"));
Splitter类可对字符串切分为List、Map。常用方法有:
方法 | 使用 |
---|---|
on() | 指定分隔符 |
onPattern() | 使用正则作为分隔符 |
fixedLength() | 固定长度切分 |
withKeyValueSeparator() | 指定key/value的分隔符,用于切分为Map类型 |
trimResults() | 去掉首尾空白符 |
omitEmptyStrings() | 忽略空串 |
limit() | 限制切分的个数 |
splitToList() | 切分为List |
split() | 切分 |
示例如下:
String rawStr="好好学习 study ,hard 123 2323 , ! sf!!!桂\t林S\nSDF\rSSD 、DF alter(test);
//单个分隔符(可单字或多字)分隔
List<String> list1 = Splitter.on("。").trimResults().omitEmptyStrings().splitToList(rawStr);
//正则分隔
List<String> list2 = Splitter.onPattern("\\s").trimResults().omitEmptyStrings().splitToList(rawStr);
//多个分隔符分隔
List<String> list3 = Splitter.on(CharMatcher.anyOf(",,")).trimResults().omitEmptyStrings().splitToList(rawStr);
//fixedLength固定长度切分,limit限制最大分隔量
List<String> list4 = Splitter.fixedLength(8).trimResults().omitEmptyStrings().limit(6).splitToList(rawStr);
//字符串转为map,on切分字符串,withKeyValueSeparator分隔key和value
Map<String, String> map1 = Splitter.on(",").withKeyValueSeparator("=").split("one=1,two=2,three=3,four=4");
CharMatcher类可进行字符串匹配抽取,流程是
匹配目标串 --> 对匹配串操作
匹配目标串常用方法有:
方法 | 使用 |
---|---|
inRange() | 指定匹配字符区间 |
whitespace() | 匹配空白符 |
ascii() | 匹配ascci码 |
javaIsoControl() | 匹配ios控制符 |
is() | 匹配指定字符 |
isNot() | 不匹配指定字符 |
anyOf() | 匹配任意字符 |
noneOf() | 不匹配任意字符 |
还可使用or(或)/negate(取反)/and(并)进行逻辑组合。
对匹配串操作的常用方法有:
方法 | 使用 |
---|---|
retainFrom() | 保留匹配串 |
removeFrom() | 删除匹配串 |
replaceFrom() | 替换匹配串 |
collapseFrom() | 去掉连接匹配串,并用指定字符代替 |
trimFrom() | 删除首尾匹配串 |
countIn() | 统计匹配串 |
matchesAnyOf() | 判断是否匹配任一字符 |
示例如下:
String rawStr="好好学习 study hard 123 2323 ! sf!!!桂\t林S\nSDF\rSSD DF alter(test);
//在原始串中保留指定区间内的字符
result = CharMatcher.inRange('0', '9').retainFrom(rawStr);
//去掉空白或指定字符
result = CharMatcher.whitespace().or(CharMatcher.anyOf("<>!/,。")).removeFrom(rawStr);
//替换非\t\n\r的字符
result = CharMatcher.javaIsoControl().negate().replaceFrom(rawStr, "default");
//去掉首尾ascii码字符
result = CharMatcher.ascii().trimFrom(rawStr);
//统计ascii码字符
int cnt = CharMatcher.ascii().countIn(rawStr);
//判断ascii码字符
boolean flag = CharMatcher.ascii().matchesAnyOf(rawStr);
//去掉连续指定字符并用指定字符替换
result = CharMatcher.whitespace().trimAndCollapseFrom(rawStr, ' ');
Charsets类提供了常用编码工具类,示例如:
//Charsets.UTF_8即是Charset.forName("UTF-8")
byte[] b1 = "study".getBytes(Charsets.UTF_8);
CaseFormat提供了属性名转换的方法,常用属性格式有:
属性名格式 | 解析 |
---|---|
CaseFormat.LOWER_UNDERSCOR | 小写下划线,如lower_underscore |
CaseFormat.LOWER_CAMEL | 小写驼峰,如lowerCamel |
CaseFormat.LOWER_HYPHEN | 小写中划线,如lower_hyphen |
CaseFormat.UPPER_CAMEL | 大写驼峰,如UpperCamel |
CaseFormat.UPPER_UNDERSCORE | 大写下划线,如UPPER_UNDERSCORE |
示例如下:
//小下划线转为小写驼峰,返回值为stuName
result = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "stu_name");
//小写驼峰转为下划线,返回值为stu_name
result = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, "stuName");
//小驼峰转为小写中划线,返回值为stu-name
result = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN, "stuName");
//小写驼峰转为大写驼峰,返回值为StuName
result = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, "stuName");
//小写驼峰转为大写下划线,返回值为STU_NAME
result = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, "stuName");
Strings类提供了字符串的处理,包括相同前后缀提取、字符填充、格式化等。
示例如下:
//获取相同前缀
result = Strings.commonPrefix("aacdd22","aacex22");
//获取相同后缀
result = Strings.commonSuffix("aacdd22","aacex22");
//开头字符填充
result = Strings.padStart("aa",8,'x');
//结尾字符填充
result = Strings.padEnd("aa",8,'x');
//结尾字符填充
result = Strings.repeat("ax",3);
//格式化字符串
result = Strings.lenientFormat("%s+%s=%s", 1,2,3);
至此列举了guava中部分常用的字符串操作,举一反三,更多操作请查看源码。