原文出处: oschina

在这个系列的第一部分里,我简单的介绍了非常优秀的Google collections和Guava类库,并简要的解释了作为Java程序员,如果使用Guava库来减少项目中大量的样板代码。在这篇博文中我们将深入挖掘Guava提供的更高级的特性。

我们将深入挖掘Guava库,并了解一下优雅的CharMatcher类、Joiner以及Splitter类,以及在处理Java基本类型时Guava给我们带来的别的工具类。

The Guava CharMatcher

CharMatcher 可以非常方便地添加到你的java工具箱中。有些人形容它:“像打了兴奋剂的StringUtils”:p

你可以使用预先设定好的常量,比如CharMatcher.WHITESPACE, CharMatcher.JAVA_DIGIT 或者CharMatcher.ASCII,此外你还有很多简便的工厂方法如CharMatcher.is(‘aaa’), CharMatcher.isNot(‘bbb’), CharMatcher.oneOf(‘abcd’).negate(),甚至更复杂一些比如:

1
CharMatcher.inRange('a',
'z').or(inRange('A',
'Z'));

当然你可以继承它然后实现方法 matches(char c)。你可以把 Google Collection中都创造实现一遍(当然下次我们会覆盖到)!

如果你想从字符串中得到所有的数字,那么你可以这样:

1
String
string = CharMatcher.DIGIT.retainFrom(
"some
text 89983 and more"
);

如果你想把字符串中的数据都去掉,可以如下:

1
String
string = CharMatcher.DIGIT.removeFrom(
"some
text 89983 and more"
);

还有好多匹配的方法:

matchesAllOf(CharSequence)

matchesAnyOf(CharSequence)

matchesNoneOf(CharSequence)

除了indexIn, lastIndexIn and countIn这些方法,还有很多trimming, replacing and collapsing相关的方法.

更多信息查看Java
doc

Joiner and Splitter

目前Joiner还是Collections 的一部分,Splitter 已经加入了Guava (不过一旦Collections 发布1.0版本,那么它们会一起加入到Guava)。

可以这么使用Joiner:

1
2
String[]
subdirs = {
"usr",
"local",
"lib"

};
String
directory = Joiner.on(
"/").join(subdirs);

或者这样:

1
2
int[]
numbers = {
1,
2,
3,
4,
5

};
 String
numbersAsString = Joiner.on(
";").join(Ints.asList(numbers));

得益于Guava对基本型的支持,可以很方便这么处理:

1
String
numbersAsStringDirectly = Ints.join(
";",
numbers);

对于字符串,我们可以直接进行分割,但是这样做多少有些奇怪, Splitter 提供了更多的操作,而且更加健壮。字符创分割通常返回的是一个数组而 Splitter 返回的是一个迭代 Iterable。

1
Iterable
split = Splitter.on(
",").split(numbsAsString);

你可以简单地分割字符串:

1
String[]
splitRegular = testString.split(
",");

但是当需要处理下面这样的字符串时:

1
String
testString =
"foo
, what,,,more,"
;

输出结果是:

‘foo ‘

‘ what’





‘more

这样的结果也许还可以,但是Splitter允许我们对分割结果做更多的控制:

1
Iterable<String>
split = Splitter.on(
",").omitEmptyStrings().trimResults().split(testString);

得到的结果是 foo’,’what’,’more’

Joiner和Splitter都是可配置的,甚至你可以把Joiner使用在map中。

Working with primitives cont’d

在博客的第一部分,我简单提到了基本型的用法。Guava已经提供了诸如Ints.compare(a, b)和Ints.toArray(list)。

让我介绍Guava 关于基本型提供的更多的一些用法吧。

假如我有一个整型数字数组,我们想知道数组中是否有特定的整型数字。传统的写法如下:

1
2
3
4
5
6
7
8
int[]
array = {
1,
2,
3,
4,
5

};
 int

a =
4;
 boolean

hasA =
false;
 for

(
int

i : array) {
 if

(i == a) {
 hasA
=
true;
 }
 }

使用Guava,我们可以如下:

1
boolean

contains = Ints.contains(array, a);

同样,其他类型的基本型数组也可以这么来做。我们甚至可以直接对数组做如下的事:

1
2
3
4
int

indexOf = Ints.indexOf(array, a);
int

max = Ints.max(array);
int

min = Ints.min(array);
int[]
concat = Ints.concat(array, array2);

在这个系列的下一章我们将关注下 Google Collections library包的更高级特性如:Functions, Filtering and Ordering!欢迎继续收看,请与我们分享你的看法。

from:http://www.importnew.com/15718.html

Guava 教程2-深入探索 Google Guava 库的更多相关文章

  1. 使用 Google Guava 美化你的 Java 代码

    文章转载自:http://my.oschina.net/leejun2005/blog/172328 目录:[ - ] 1-使用 GOOGLE COLLECTIONS,GUAVA,STATIC IMP ...

  2. Google Guava官方教程(中文版)

    Google Guava官方教程(中文版) 原文链接  译文链接 译者: 沈义扬,罗立树,何一昕,武祖  校对:方腾飞 引言 Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库, ...

  3. ☕【Java技术指南】「Guava Collections」实战使用相关Guava不一般的集合框架

    Google Guava Collections 使用介绍 简介 Google Guava Collections 是一个对 Java Collections Framework 增强和扩展的一个开源 ...

  4. Guava 教程1-使用 Google Collections,Guava,static imports 编写漂亮代码

    原文出处: oschina (API:http://ifeve.com/category/framework/guava-2/ JAR DOC Source 链接:http://pan.baidu.c ...

  5. [转]Google Guava官方教程(中文版)

    Google Guava官方教程(中文版) http://ifeve.com/google-guava/

  6. Google Guava官方教程(中文版)地址

    Google Guava官方教程(中文版) http://ifeve.com/google-guava/ 瓜娃啊瓜娃

  7. Google Guava新手教程

         以下资料整理自网络 一.Google Guava入门介绍 引言 Guavaproject包括了若干被Google的 Java项目广泛依赖 的核心库,比如:集合 [collections] . ...

  8. Google Guava入门教程

    以下资料整理自网络 一.Google Guava入门介绍 引言 Guava 工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] .缓存 [cachi ...

  9. Guava 教程(3):Java 的函数式编程,通过 Google Collections 过滤和调用

    原文出处: oschina 在本系列博客的第一.二部分,我介绍了非常优秀的Google Collections和Guava包.本篇博客中我们来看看如何使用Google Collections来做到过滤 ...

随机推荐

  1. Hibernate给表和字段设置前后缀及分隔符

    在<一口一口吃掉Hibernate(一)--使用SchemaExport生成数据表>中介绍了如何生成数据表.但是这只是最基本的.hibernate在生成或者操作数据库时,会受一些限制.比如 ...

  2. django.db.utils.ProgrammingError: 1146 的解决办法

    在models中设置完数据库相关的东西后执行命令 python manage.py makemigrations 此处无错误 再次执行 python manage.py migrate 发生报错 错误 ...

  3. truncated、delete和drop的异同点

    相同点 truncate和不带where子句的delete, 以及drop都会删除表内的数据. 不同点: 1.truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结 ...

  4. all unicode

    Unicode Chart Range Decimal Name 0x0000-0x007F 0-127 Basic Latin 0x0080-0x00FF 128-255 Latin-1 Suppl ...

  5. 最小费用最大流(luogu P3381 【模板】最小费用最大流)

    题目链接 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S. ...

  6. python笔记一(语言简介、解释器、输入输出)

    一.python语言简介 一顿狂吹python目前有多火.多NB,哈哈哈,不过用起来心情确实很舒畅. 解释性语言:缺点,运行速度慢. 二.python解释器 与C.C++.java不同,以上都需要先将 ...

  7. 牛客网编程练习之PAT乙级(Basic Level):1041 说反话

    直接分隔取反即可 AC代码: import java.util.Scanner; /** * @author CC11001100 */ public class Main { public stat ...

  8. Matlab—regexp正则表达式

    原文转自:http://blog.csdn.net/yf210yf/article/details/42421523 关于正则表达式的基本知识 正则表达式就是一个表达式(也是一串字符),它定义了某种字 ...

  9. 安卓高级 WebView的使用到 js交互

    我们先来学习 怎么使用再到用js和安卓源生方法交互 WebView简单使用 此部分转载并做了补充 原博客 原因:比较简单不是很想在写,我只要写js交互部分 WebView可以使得网页轻松的内嵌到app ...

  10. Linux块设备加密之dm-crypt分析

    相关的分析工作一年前就做完了,一直懒得写下来.现在觉得还是写下来,以来怕自己忘记了,二来可以给大家分享一下自己的研究经验. 这篇文章算是<Device Mapper代码分析>的后续篇,因为 ...