zoukankan      html  css  js  c++  java
  • StringJointer

    StringJoiner有如下两个构造函数。
    StringJoiner(CharSequence delimiter)
    StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)

    e.g.有两个字符串为“hello”和“world”,想连接这些字符串为[hello,world],则可使用第二个构造函数,传参:前缀、后缀和定界符

    调用add方法,源代码如下

        public StringJoiner add(CharSequence newElement) {
            prepareBuilder().append(newElement);
            return this;
        }
        
        private StringBuilder prepareBuilder() {
            //此处value为一个StringBilder实例,是StringJoiner的一个成员
            if (value != null) {
                value.append(delimiter);
            } else {
                value = new StringBuilder().append(prefix);
            }
            return value;
        }

    第一次add会走else部分,新建一个StringBuilder对象并添加prefix元素(此处在调用构造器的时候为其赋值为空)赋值给成员变量,回到add方法添加该元素到StringBuilder中,第二次add到prepareBuilder方法中只会向StringBuilder实例中添加delimiter分割符,然后出来add方法中又将第二个元素添加到其中。这样就完成了为这些元素连接一个分隔符,并放入到StringBuilder实例中,最后toString()返回。

    toString()源码如下,会加上后缀

        public String toString() {
            if (value == null) {
                return emptyValue;
            } else {
                if (suffix.equals("")) {
                    return value.toString();
                } else {
                    int initialLength = value.length();
                    String result = value.append(suffix).toString();
                    // reset value to pre-append initialLength
                    value.setLength(initialLength);
                    return result;
                }
            }
        }
  • 相关阅读:
    洛谷 P1244 青蛙过河
    洛谷 P1004 方格取数
    洛谷 CF894A QAQ
    【题解】洛谷 P5506 封锁
    洛谷 P3884 [JLOI2009]二叉树问题
    Bzoj4894 天赋
    Bzoj4893 项链分赃
    Bzoj3583 杰杰的女性朋友
    POJ3233 Matrix Power Series
    UOJ#204 【APIO2016】Boat
  • 原文地址:https://www.cnblogs.com/zhu-tingting/p/7406423.html
Copyright © 2011-2022 走看看