Splitter:在Guava官方的解释为:Extracts non-overlapping substrings from an input string, typically by recognizing appearances of a separator sequence. This separator can be specified as a single character, fixed stringregular expression or CharMatcher instance. Or, instead of using a separator at all, a splitter can extract adjacent substrings of a given fixed length.

从输入的字符串中抽取不重复的子串,通常是分析给定的分割序列;这个分割符可以是单个的字符(on(char separator))、字符串(on(final String separator))、正则表达式(on(final Pattern separatorPattern))或者是一个CharMatcher实例(on(final CharMatcher separatorMatcher))。当然,也可以不传入分隔符(fixedLength(final int length)),从而将给定的字符串分割为长度为length的子字符串。

比如:Splitter.on(‘,’).split(“foo,bar,qux”),返回的结果是Iterable接口类型的数据,内容为foo,bar,qux,并且分割得到的子字符串顺序和其在规定字符串中出现的顺序是一致的。

通常,Splitter的行为是很简单的,并且毫无假设性,如果你有以下的语句Splitter.on(‘,’).split(“ foo,,, bar ,”),那么得出来的子字符串序列为 [" foo", "", "", " bar ", ""],其中包含了空的字符串,这可能不是我们需要的,可以通过Splitter类中的trimResults()方法去掉子串的空格,以及omitEmptyStrings()方法去掉空的子串。运行之后的结果为["foo", "bar"]。

需要注意的:Splitter对象是immutable的,所以在你为Splitter对象添加配置方的时候,你必须用一个新的Splitter对象去接收,如下:

public static Iterable<String> test(){
  // Do NOT do this
  Splitter splitter = Splitter.on('/');
  splitter.trimResults(); // does nothing!
  return splitter.split("wrong / wrong / wrong");
}

得到的结果是[wrong ,  wrong ,  wrong],可以看出,对splitter对象配置的trimResults()方法并没有对下面的结果起到作用。

Splitter类还提供了limit(int limit)方法,当分割的子字符串达到了limit个时,则停止分割,如下:
Splitter.on(‘,’).limit(3).split(“a,b,c,d”) 结果为["a", "b", "c,d"]
当需要去掉空的子字符串时,这个空的子字符串是不记入到limit中的,如下:
Splitter.on(‘,’).limit(3).omitEmptyStrings().split(“a,,,b,,,c,d”)结果为 ["a", "b", "c,d"]
Splitter可以用指定的分隔符来分割给定的字符串,和Java中String类中的split()相比,Splitter更加灵活:
(1)、Splitter可以支持单个字符、字符串、正则表达式或者CharMatcher实例来分割给定的字符串,而String类中的split()方法只支持用正则表达式来分割给定的字符串,用途很有限。
(2)、我们都知道,用正则表达式来分割字符串的效率很低,对于大量的字符串分割如果用String类中的split()方法势必影响程序的效率,建议使用Splitter类提供的方法。
(3)、String类中的split()方法返回的是String数组类型,而Splitter类返回的是Iterator类型的接口,可以直接用在集合中(Lists.newArrayList(Splitter.on(‘,’).split(“_a ,_b_,c__”));)
(4)、Splitter类用了GwtCompatible注释,它是Google Web Toolkit(GWT)兼容的。
(5)、我们还可以通过Splitter类中的trimResults()方法去掉子串中的空格,以及omitEmptyStrings()方法去掉空的子串,大大简化了用户的使用。        (6)、Splitter类可以在结果中继续分割,比如:Map<String,String> split = Splitter.on(‘;’).trimResults().withKeyValueSeparator(“=”).split(“a=2;b=3″); 直接返回Map的键值对,这比String中的split方法强大多了,很值得用。

[置顶] Guava学习之Splitter的更多相关文章

  1. [置顶] Guava学习之Iterators

    Iterators类提供了返回Iterator类型的对象或者对Iterator类型对象操作的方法.除了特别的说明,Iterators类中所有的方法都在Iterables类中有相应的基于Iterable ...

  2. [置顶] Guava学习之ArrayListMultimap

    ArrayListMultimap类的继承关系如下图所示: Guava ArrayListMultimap List Multimap 是一个接口,继承自 Multimap 接口.ListMultim ...

  3. [置顶] Guava学习之Lists

    Lists类主要提供了对List类的子类构造以及操作的静态方法.在Lists类中支持构造ArrayList.LinkedList以及newCopyOnWriteArrayList对象的方法.其中提供了 ...

  4. [置顶] Guava学习之Immutable集合

    Immutable中文意思就是不可变.那为什么需要构建一个不可变的对象?原因有以下几点: 在并发程序中,使用Immutable既保证线程安全性,也大大增强了并发时的效率(跟并发锁方式相比).尤其当一个 ...

  5. [置顶] Guava学习之Multimap

    相信大家对Java中的Map类及其之类有大致的了解,Map类是以键值对的形式来存储元素(Key->Value),但是熟悉Map的人都知道,Map中存储的Key是唯一的.什么意思呢?就是假如我们有 ...

  6. [置顶] Docker学习总结(7)——云端基于Docker的微服务与持续交付实践

    本文根据[2016 全球运维大会•深圳站]现场演讲嘉宾分享内容整理而成 讲师简介 易立 毕业于北京大学,获得学士学位和硕士学位:目前负责阿里云容器技术相关的产品的研发工作. 加入阿里之前,曾在IBM中 ...

  7. [置顶] 小白学习KM算法详细总结--附上模板题hdu2255

    KM算法是基于匈牙利算法求最大或最小权值的完备匹配 关于KM不知道看了多久,每次都不能完全理解,今天花了很久的时间做个总结,归纳以及结合别人的总结给出自己的理解,希望自己以后来看能一目了然,也希望对刚 ...

  8. [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading

    上次在<iOS学习笔记46——图片异步加载之SDWebImage>中介绍过一个开源的图片异步加载库,今天来介绍另外一个功能类似的EGOImageLoading,看名字知道,之前的一篇学习笔 ...

  9. [置顶] Android学习系列-Android中解析xml(7)

    Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件.   ...

随机推荐

  1. Linux07--Shell程序设计03 通配符与正则表达式

    通配符 通配符可用于代替字符. 通常地,星号“*”匹配0个或以上的字符,问号“?”匹配1个字符. 使用情况: 1.文件和目录 在CP/M.DOS.Microsoft Windows和类Unix操作系统 ...

  2. ApiDemos示例学习(2)——App->Activity->Animation

    现在介绍一下com.example.android.app包下的Animation示例. 关键类及函数: ActivityOption overridePendingTransition() make ...

  3. 普林斯顿大学算法课 Algorithm Part I Week 3 排序稳定性 Stability

    稳定性(Stability):先按性质A排序,再按性质B排序,性质B相同的那些项是否仍然是按性质A排序的? 一个稳定的排序,相同值的元素应仍保持相对顺序(relative order) 稳定的算法:插 ...

  4. 【Spring MVC系列】--(4)返回JSON

    [Spring MVC系列]--(4)返回JSON 摘要:本文主要介绍如何在控制器中将数据生成JSON格式并返回 1.导入包 (1)spring mvc 3.0不需要任何其他配置,添加一个jackso ...

  5. Android系统移植与调试之------->如何修改Android设备的开机第一阶段Logo

    1.切换到~/mx0831-0525/device/other/TBDG1073/res_pack目录下 2.更换bootup和poweron文件 找一张bmp16位的图片去除后缀名将这两张都替换,转 ...

  6. c++ string.find()函数的陷阱

    string.find(char *)查找字符串中是否包含子串 找到:返回第一个索引 没有找到:返回一个很大的随机数字而不是返回负数(这是个坑) 所以不能这么写if (string.find(str) ...

  7. 打包ipa分发给测试机安装步骤

    1.确定可以打包的Mac电脑,即该Mac电脑已经具备可以打包的权限. 需要上传一份Mac电脑的描述文件,即csr文件. 2.创建bundle id 3.添加测试设备 4.生成证明描述文件 5.Xcod ...

  8. Floodlight中 处理packetin消息的顺序(1)

    当Controller和SW建立连接之后,就能够处理来自SW的各种OF msg.当接收到 packetin 消息之后,会将其分发给各个监听了这个OFMessage的listeners,所以假设我们要设 ...

  9. hdu4740【杭州网赛、模拟、有点搜索?】

    当时看了这题就感觉so easy...  本来不想写的,后来感觉是不是可以练一下搜索水平.. 比赛时有人过了就没写.       比赛完了写一下. 实现还不是那么顺利,  囧 本来自己以为这题能练下搜 ...

  10. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...