Joiner

Joiner可以将一系列的字符串用指定的分隔符进行拼接。

使用

  • 构造方法

Joiner的构造方法都是私有的,需要使用其提供的静态方法获取对象。

// 私有构造方法
private Joiner(String separator) {this.separator = checkNotNull(separator);}
private Joiner(Joiner prototype) {this.separator = prototype.separator;
}// 静态方法
public static Joiner on(String separator) {return new Joiner(separator);
}
public static Joiner on(char separator) {return new Joiner(String.valueOf(separator));
}
  • 拼接方法

appendTo()方法是Joiner最基础的方法,所有的拼接都会用到这个方法,例如join()方法。

/*** A appendable 装拼接结果的容器* Iterator<?> parts 要拼接的对象,需要实现Iterator接口* 返回值 <A extends Appendable> A 返回装拼接结果的容器,其实这里就是传入的appendable*/
public <A extends Appendable> A appendTo(A appendable, Iterator<?> parts) throws IOException {// 检查对象是否为空checkNotNull(appendable);if (parts.hasNext()) {// 使用本地的Joiner提供的toString()方法,防止NullPointerExceptionappendable.append(toString(parts.next()));// if-while结构保证最后一个字符串之后没有分隔符while (parts.hasNext()) {appendable.append(separator);appendable.append(toString(parts.next()));}}return appendable;}

join()方法,底层调用了appendTo()方法。

public final String join(Iterable<?> parts) {return join(parts.iterator());
}public final String join(Iterator<?> parts) {return appendTo(new StringBuilder(), parts).toString();
}public final String join(Object[] parts) {return join(Arrays.asList(parts));
}public final String join(@Nullable Object first, @Nullable Object second,                Object... rest) {return join(iterable(first, second, rest));
}
  • 其他方法

useForNull方法,将传入的字符串作为集合中null值的替换值。

public Joiner useForNull(final String nullText) {checkNotNull(nullText);// 因为得到Joiner对象之后就不能再改变,所以在方法内返回了一个匿名Joiner类对象,覆写方法return new Joiner(this) {@OverrideCharSequence toString(@Nullable Object part) {// 如果有null,就用nullText替换return (part == null) ? nullText : Joiner.this.toString(part);}// 禁止重复调用@Overridepublic Joiner useForNull(String nullText) {throw new UnsupportedOperationException("already specified useForNull");}// 禁止重复调用@Overridepublic Joiner skipNulls() {throw new UnsupportedOperationException("already specified useForNull");}};
}

skipNulls方法,跳过null值。

public Joiner skipNulls() {// 匿名类,作用同useForNullreturn new Joiner(this) {@Overridepublic <A extends Appendable> A appendTo(A appendable, Iterator<?> parts) throws IOException {checkNotNull(appendable, "appendable");checkNotNull(parts, "parts");// 拼接第一个非null元素,这样的目的有两个,1是防止最后一个元素加上了分隔符,2是防止只有一个非null元素还要单独进行分隔符的处理while (parts.hasNext()) {Object part = parts.next();if (part != null) {appendable.append(Joiner.this.toString(part));break;}}while (parts.hasNext()) {Object part = parts.next();// 非null元素以及分隔符进行拼接if (part != null) {appendable.append(separator);appendable.append(Joiner.this.toString(part));}}return appendable;}// 禁止重复调用@Overridepublic Joiner useForNull(String nullText) {throw new UnsupportedOperationException("already specified skipNulls");}// 禁止重复调用@Overridepublic MapJoiner withKeyValueSeparator(String kvs) {throw new UnsupportedOperationException("can't use .skipNulls() with maps");}};
}

withKeyValueSeparator方法,将键值对用指定分隔符进行拼接。

public MapJoiner withKeyValueSeparator(char keyValueSeparator) {return withKeyValueSeparator(String.valueOf(keyValueSeparator));
}public MapJoiner withKeyValueSeparator(String keyValueSeparator) {return new MapJoiner(this, keyValueSeparator);
}

toString方法

CharSequence toString(Object part) {checkNotNull(part); // checkNotNull for GWT (do not optimize).return (part instanceof CharSequence) ? (CharSequence) part : part.toString();
}

Guava Joiner相关推荐

  1. Google Guava 实战之字符串处理篇

    <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifac ...

  2. mapreduce 算法_MapReduce算法–了解数据联接第1部分

    mapreduce 算法 在本文中,我们继续执行一系列实现算法的系列,该算法在使用MapReduce进行数据密集型文本处理中找到,这一次讨论数据联接. 虽然我们将讨论在Hadoop中联接数据的技术并提 ...

  3. MapReduce算法–了解数据联接第1部分

    在本文中,我们继续执行一系列实现算法的系列,该算法在使用MapReduce进行数据密集型文本处理中找到,这一次讨论数据联接. 虽然我们将讨论在Hadoop中联接数据的技术并提供示例代码,但在大多数情况 ...

  4. 【Java常用工具类汇总 2,Java面试题百度云

    System.out.println(Strings.padStart("zs", 1, '*'));//zs,需要注意,这里不会返回sSystem.out.println(Str ...

  5. Java 多行字符串

    在本文中,我们来说说 Java 的多行字符串(multiline strings ). 从 JDK 15 开始,Java 提供了一个称为 Text Blocks 的语法,你可以在代码中直接使用这个功能 ...

  6. 【Java常用工具类汇总 2,linux摄像头驱动架构

    System.out.println(Strings.padStart("zs", 2, '*'));//zs System.out.println(Strings.padStar ...

  7. Google Guava学习笔记——基础工具类Joiner的使用

    Guava 中有一些基础的工具类,如下所列: 1,Joiner 类:根据给定的分隔符把字符串连接到一起.MapJoiner 执行相同的操作,但是针对 Map 的 key 和 value. 2,Spli ...

  8. Guava中基础工具类Joiner的使用字符串拼接方法 joiner.on

    Guava 中有一些基础的工具类,如下所列: 1,Joiner 类:根据给定的分隔符把字符串连接到一起.MapJoiner 执行相同的操作,但是针对 Map 的 key 和 value. 2,Spli ...

  9. Guava学习之Joiner

    本文是对 Guava 中 Joiner 的学习介绍.欢迎加入学习项目: LearningGuava. 使用示例 以下参考:官方文档. 开发过程中,用分隔符连接字符串序列可能是一个比较繁琐的过程,但本不 ...

  10. guava中的Joiner

    1.结构图 Joiner处理数组.迭代器的拼接 MapJoiner:处理map元素的拼接 2.Joiner 2.1 useForNull 拼接时用字符串代替null值 2.2 skipNulls 拼接 ...

最新文章

  1. SAP WM 确定WM移动类型配置里'存储地点参考'优先级高于'特殊移动标记'
  2. rust怎么拆自己石墙_房屋征拆:遭遇非法强拆怎么办?如何依法维护自己的权益...
  3. JSON.parse使用 之 Unexpected token o in JSON at position 1 报错原因
  4. Uncaught TypeError: Cannot redefine property: $router
  5. 鸿蒙关键技术研究,鸿蒙内核源码分析(静态链接篇) | 完整小项目看透静态链接过程 | 百篇博客分析HarmonyOS源码 | v54.02...
  6. 紧张的飞秋(FEIQ)爱好者汗都下来了
  7. SpringBoot + Kafka + ELK 完成海量日志收集(超详细)
  8. 【Matlab土壤分类】多类SVM土壤分类【含GUI源码 1398期】
  9. 导入项目报错:Unmapped Spring configuration files found
  10. flutter混编iOS常见问题
  11. 物联网-移远M26模块初识及资料分享
  12. latex 参考文献显示问号_回「LaTeX 的罪与罚」
  13. b450支持服务器内存,b450支持内存频率是多少
  14. 使用Unity制作一个RPG游戏(1)
  15. Hibernate tools的hbm2ddl和hbm2java
  16. web和APP兼容性测试的关注点(软件测试)
  17. Mapper 接口的如何起作用
  18. STM32通信:IIC (二)
  19. 分时操作系统和实时操作系统
  20. port and land

热门文章

  1. make settings时编译报错:dalvik/dx/bin/Android.bp:24:1: module “dx-doc-stubs“ already defined
  2. 分库分表:应用场景、方式方法、面临问题
  3. bandizip关闭自动更新提示的方法步骤
  4. 思岚SLAMTEC A1开箱测试(实现雷达数据的查看+hector_slam建图)
  5. Fins源代码欧姆龙通讯 OneApiConnect
  6. 模拟器:思科 配置静态路由+下一跳如何配置,使三个路由器相互通信
  7. 基于MATLAB的运动目标检测系统
  8. 直面程序人生,始于当下,奔赴未来!
  9. PTA 数据结构与算法题目集(中文)7-38 寻找大富翁(25 分)快排或堆排序
  10. python math库