Guava源码阅读——base包.Joiner类

Joiner类的基本功能:

将字符串数组按指定分隔符连接起来,或字符串串按指定索引开始使用指定分隔符连接起来,通过Join类,我们可以方便实现将容器中的数据按照自定义的方式拼接成一个字符串,而且这是一种线程安全的方式。

变量:

//分隔符

构造方法:

这两个构造函数都是静态构造器,所以不能直接使用这两个构造器去创建Joiner,所以想要创建Joiner只能使用静态方法。可接收字符串和字符,字符串可以为空,字符不能为空字符。

 

静态创建Joiner方法

这两个方法是:一个传入字符串;一个传入字符,然后直接分别使用两个构造器构造的。

Join实现类

public final String join(Iterable<?> parts) {
    return join(parts.iterator());
  }

public final String join(Iterator<?> parts) {
    return appendTo(new StringBuilder(), parts).toString();
  }

public final StringBuilder appendTo(StringBuilder builder, Iterator<?> parts) {
    try {
      appendTo((Appendable) builder, parts);
    } catch (IOException impossible) {
      throw new AssertionError(impossible);
    }
    return builder;
  }
/*
上面代码是一种重载的思想,最终是通过appendTo方法进行的字符创拼接,
注意到这里传入的第一个参数是一个StringBuilder对象,为了就是保证线程的安全性,
防止多线程环境下可能出现的问题。
*/

/*
ppendTo函数实现
*/
public <A extends Appendable> A appendTo(A appendable, Iterator<?> parts) throws IOException {
    checkNotNull(appendable);
    if (parts.hasNext()) {
      appendable.append(toString(parts.next()));
      while (parts.hasNext()) {
        appendable.append(separator);
        appendable.append(toString(parts.next()));
      }
    }
    return appendable;
  }
/*可以看到这里首先检查了一下这个StringBuilder是否为空,如果为空就会抛出异常。
再然后就是迭代器的遍历了,注意到这里有一个toString()方法,很明显,这里重写了Object类的这个方法*/

CharSequence toString(Object part) {
    checkNotNull(part); // checkNotNull for GWT (do not optimize).
    return (part instanceof CharSequence) ? (CharSequence) part : part.toString();
  }
/*同样这里做了类型检查,就是为了防止容器中有null对象,其次就是如果part本身就是字符数组了,就不用调用tostring方法了,节约系统资源。
除了第一个元素外,其余每一个元素都是分隔符与元素的拼接,很简单的逻辑。就这样完成了一次拼接操作。*/






 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值