guava 提供了非常强大的字符串处理操作
1 Joiner
以前肯定遇到过这样的场景,为了sql查询,把一个List<Integer>集合拼接成一个字符串,用逗号隔开,看一下Joiner如何实现的:
public static void main (String args[]) { List<Integer> list = Lists.newArrayList(1,2,3,4,5); Joiner joiner = Joiner.on(",").skipNulls(); System.out.println(joiner.join(list)); }
输出结果:1,2,3,4,5
是不是很方便?Joiner提供on方法,用来作为各个对象之间的连接
2 Splitter
demo:
public static void main (String[] args) { String str = "fasdga, , fasgasd, fasdgas"; Splitter splitter = Splitter.on(",").omitEmptyStrings().trimResults(); List<String> stringList = splitter.splitToList(str); for (String s : stringList) { System.out.println(s + "============"); } }
on方法指定按什么分割,omitEmptyStrings方法表示分割结果项中有空字符串则忽略, trimResults表示对分割后的结果使用trim方法
3 Charsets
类似一个枚举值,提供各种字符集,如:Charsets.UTF_8
4 CaseFormat
CaseFormat被用来方便地在各种ASCII大小写规范间转换字符串——比如,编程语言的命名规范。CaseFormat支持的格式如下:
格式 | 范例 |
LOWER_CAMEL | lowerCamel |
LOWER_HYPHEN | lower-hyphen |
LOWER_UNDERSCORE | lower_underscore |
UPPER_CAMEL | UpperCamel |
UPPER_UNDERSCORE | UPPER_UNDERSCORE |
此类一般情况下没用,当使用反射的时候可能有用,比如,你想获取一个属性的get方法,属性名称为"name",那么方法名称为getName,如果你不知道具体的属性名称, 你会怎么做呢?
@Override public String toString () { Field[] fields = this.getClass().getDeclaredFields(); Objects.ToStringHelper toStringHelper = Objects.toStringHelper(this.getClass()); try { for (Field field : fields) { //这里用到CaseFormat,把方法名转换成驼峰标示(当然这里也可以自己动手去处理字符串) String methodName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, "get-" + field.getName()); Method method = this.getClass().getMethod(methodName); toStringHelper.add(field.getName(), method.invoke(this)); } } catch (Exception e) { e.printStackTrace(); } return toStringHelper.toString(); }
5 CharMatcher
(1)CharMatcher 实现了接口Predicate<Character>,可用来作为集合的过滤器,CharMatcher是一个抽象类,如果要实现自己的CharMatcher要实现方法matches方法
(2)CharMatcher 一般情况下做了两件事:
2.1 匹配字符,获取到CharMatcher
2.2 在获取到的CharMatcher上做操作
(3)CharMatcher 自己提供了很多CharMatcher的实现:
ANY: 匹配任何字符
ASCII: 匹配是否是ASCII字符
BREAKING_WHITESPACE: 匹配所有可换行的空白字符(不包括非换行空白字符,例如"\u00a0")
DIGIT: 匹配ASCII数字
INVISIBLE: 匹配所有看不见的字符
JAVA_DIGIT: 匹配UNICODE数字, 使用 Character.isDigit() 实现
JAVA_ISO_CONTROL: 匹配ISO控制字符, 使用 Charater.isISOControl() 实现
JAVA_LETTER: 匹配字母, 使用 Charater.isLetter() 实现
JAVA_LETTER_OR_DIGET: 匹配数字或字母
JAVA_LOWER_CASE: 匹配小写
JAVA_UPPER_CASE: 匹配大写
NONE: 不匹配所有字符
SINGLE_WIDTH: 匹配单字宽字符, 如中文字就是双字宽
WHITESPACE: 匹配所有空白字符
(4)CharMatcher 提供了一些静态方法来让使用者更方便的获取CharMater对象,来处理字符串:
CharMatcher is(char match): 返回匹配指定字符的Matcher
CharMatcher isNot(char match): 返回不匹配指定字符的Matcher
CharMatcher anyOf(CharSequence sequence): 返回匹配sequence中任意字符的Matcher
CharMatcher noneOf(CharSequence sequence): 返回不匹配sequence中任何一个字符的Matcher
CharMatcher inRange(char startInclusive, char endIncludesive): 返回匹配范围内任意字符的Matcher
CharMatcher forPredicate(Predicate<? super Charater> predicate): 返回使用predicate的apply()判断匹配的Matcher
CharMatcher negate(): 返回以当前Matcher判断规则相反的Matcher
CharMatcher and(CharMatcher other): 返回与other匹配条件组合做与来判断的Matcher
CharMatcher or(CharMatcher other): 返回与other匹配条件组合做或来判断的Matcher
(5)上面几条主要讲了默认实现的CharMatcher,以及如果获取CharMatcher,下面说一下,获取到了CharMatcher如何处理字符:
boolean matchesAnyOf(CharSequence sequence): 只要sequence中有任意字符能匹配Matcher,返回true
boolean matchesAllOf(CharSequence sequence): sequence中所有字符都能匹配Matcher,返回true
boolean matchesNoneOf(CharSequence sequence): sequence中所有字符都不能匹配Matcher,返回true
int indexIn(CharSequence sequence): 返回sequence中匹配到的第一个字符的坐标
int indexIn(CharSequence sequence, int start): 返回从start开始,在sequence中匹配到的第一个字符的坐标
int lastIndexIn(CharSequence sequence): 返回sequence中最后一次匹配到的字符的坐标
int countIn(CharSequence sequence): 返回sequence中匹配到的字符计数
String removeFrom(CharSequence sequence): 删除sequence中匹配到到的字符并返回
String retainFrom(CharSequence sequence): 保留sequence中匹配到的字符并返回
String replaceFrom(CharSequence sequence, char replacement): 替换sequence中匹配到的字符并返回
String trimFrom(CharSequence sequence): 删除首尾匹配到的字符并返回
String trimLeadingFrom(CharSequence sequence): 删除首部匹配到的字符
String trimTrailingFrom(CharSequence sequence): 删除尾部匹配到的字符
String collapseFrom(CharSequence sequence, char replacement): 将匹配到的组(连续匹配的字符)替换成replacement
String trimAndCollapseFrom(CharSequence sequence, char replacement): 先trim在replace
(6) 有兴趣的同学可以看一下CharMatcher的源码,可以发现CharMatcher对String的操作并没有什么高明之处,把String转化成char数组,然后根据需要做对应的操作,个人感觉CharMatcher比较好的地方在于,
作为一个工具类,提供了非常好用的api,使用内部类And和Or去实现多个CharMatcher实现与或操作,这种编码风格非常值得借鉴:
public static void main (String[] args) { String str = "12312,agg "; CharMatcher charMatcher1 = CharMatcher.is('1'); CharMatcher charMatcher2 = CharMatcher.is('2'); //两个CharMatcher或操作 CharMatcher charMatcher3 = charMatcher1.or(charMatcher2); System.out.println(charMatcher3.retainFrom(str)); } //charMatcher1.or的源码实现 public CharMatcher or(CharMatcher other) { return new Or(this, checkNotNull(other)); } //在CharMatcher内部定义了一个Or类,用来实现两个CharMatcher的Or操作,这是一种非常好的代码风格 private static class Or extends CharMatcher { final CharMatcher first; final CharMatcher second; Or(CharMatcher a, CharMatcher b, String description) { super(description); first = checkNotNull(a); second = checkNotNull(b); } Or(CharMatcher a, CharMatcher b) { this(a, b, "CharMatcher.or(" + a + ", " + b + ")"); } @GwtIncompatible("java.util.BitSet") @Override void setBits(BitSet table) { first.setBits(table); second.setBits(table); } @Override public boolean matches(char c) { return first.matches(c) || second.matches(c); } @Override CharMatcher withToString(String description) { return new Or(first, second, description); } }
相关推荐
├─Google Guava 第01讲-Joiner详细介绍以及和Java8Collector对比.wmv ├─Google Guava 第02讲-Guava Splitter详细讲解以及实战练习.wmv ├─Google Guava 第03讲-Preconditions&Objects;&assert;讲解.wmv ├─...
番石榴是一组核心库,包括新的收藏类型(例如
在Guava中,脱敏通常涉及对字符串的操作,例如使用`Strings.redact()`方法将敏感数据替换为特定的占位符,如"<REDACTED>"。此外,还可以使用`CharMatcher`类来自定义脱敏规则,只对特定类型的字符进行脱敏。 使用...
Google Guava是一个比较有趣的框架,它提供了很多有趣的的功能, google Guava 给开发者提供了如下常用功能: 集合(collections) 缓存(caching) ...字符串处理(string processing) 输入/输出(I/O),等等
google的guava工具包很实用,包括之前的字符串处理工具类的,还有大量的collection相关的
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] ...
包含10.0.1、11.0.2、16.0.1、18.0、19.0、20.0、25.1多个版本。 Guava是一种基于开源的Java库,其中包含谷歌正在由他们...这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证的实用方法。
1.字符串集合转换相关(Joiner,Splitter,CharMatcher,CaseFormat) Joiner: 主要做集合转换成字符串,提供静态方法on(String separator) | on(char separator) 设计为生成器模式, 字符串拼接使用StringBuilder(非线程...
主要介绍了java substring 截取字符串的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
下面小编就为大家带来一篇java从字符串中提取数字的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档guava源文档...
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] ...
赠送jar包:guava-23.0.jar; 赠送原API文档:guava-23.0-javadoc.jar; 赠送源代码:guava-23.0-sources.jar; 赠送Maven依赖信息文件:guava-23.0.pom; 包含翻译后的API文档:guava-23.0-javadoc-API文档-中文...
赠送jar包:guava-17.0.jar; 赠送原API文档:guava-17.0-javadoc.jar; 赠送源代码:guava-17.0-sources.jar; 赠送Maven依赖信息文件:guava-17.0.pom; 包含翻译后的API文档:guava-17.0-javadoc-API文档-中文...
guava-27.1版本的chm格式的api文档,Guava包含了若干被Google的Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生...[common annotations] 、字符串处理 [string processing] 、I/O 等等
Guava是一种基于开源的Java库,其中包含谷歌正在由他们很多项目使用的很多核心库。这个库是为了方便编码,并减少编码错误...这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证的实用方法。
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] ...
赠送jar包:guava-18.0.jar; 赠送原API文档:guava-18.0-javadoc.jar; 赠送源代码:guava-18.0-sources.jar; 包含翻译后的API文档:guava-18.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:...
赠送jar包:guava-20.0.jar; 赠送原API文档:guava-20.0-javadoc.jar; 赠送源代码:guava-20.0-sources.jar; 赠送Maven依赖信息文件:guava-20.0.pom; 包含翻译后的API文档:guava-20.0-javadoc-API文档-中文...
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] ...