zoukankan      html  css  js  c++  java
  • StringBuffer和StringBuilder

      StringBuffer和StringBuilder非常类似,均代表可变的字符序列。 这两个类都是抽象类AbstractStringBuilder的子类,方法几乎一模一样。我们打开AbstractStringBuilder的源码,如示例8-11所示:

    【示例8-11】AbstractStringBuilder 部分源码

    1
    2
    3
    4
    5
    6
    7
    abstract class AbstractStringBuilder implements Appendable, CharSequence {
        /**
         * The value is used for character storage.
         */
        char value[];
    //以下代码省略
    }

          显然,内部也是一个字符数组,但这个字符数组没有用final修饰,随时可以修改。因此,StringBuilder和StringBuffer称之为“可变字符序列”。那两者有什么区别呢?

          1. StringBuffer JDK1.0版本提供的类,线程安全,做线程同步检查, 效率较低。

          2. StringBuilder JDK1.5版本提供的类,线程不安全,不做线程同步检查,因此效率较高。 建议采用该类。

    · 常用方法列表:

          1. 重载的public StringBuilder append(…)方法

            可以为该StringBuilder 对象添加字符序列,仍然返回自身对象。

          2. 方法 public StringBuilder delete(int start,int end)

            可以删除从start开始到end-1为止的一段字符序列,仍然返回自身对象。

          3. 方法 public StringBuilder deleteCharAt(int index)

            移除此序列指定位置上的 char,仍然返回自身对象。

          4. 重载的public StringBuilder insert(…)方法

            可以为该StringBuilder 对象在指定位置插入字符序列,仍然返回自身对象。

          5. 方法 public StringBuilder reverse()

            用于将字符序列逆序,仍然返回自身对象。

          6. 方法 public String toString() 返回此序列中数据的字符串表示形式。

          7. 和 String 类含义类似的方法:

    1
    2
    3
    4
    5
    6
    public int indexOf(String str)
    public int indexOf(String str,int fromIndex)
    public String substring(int start)
    public String substring(int start,int end)
    public int length() 
    char charAt(int index)

    【示例8-12】StringBuffer/StringBuilder基本用法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public class TestStringBufferAndBuilder 1{
        public static void main(String[] args) {
            /**StringBuilder*/
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < 7; i++) {
                sb.append((char) ('a' + i));//追加单个字符
            }
            System.out.println(sb.toString());//转换成String输出
            sb.append(", I can sing my abc!");//追加字符串
            System.out.println(sb.toString());
            /**StringBuffer*/
            StringBuffer sb2 = new StringBuffer("中华人民共和国");
            sb2.insert(0"爱").insert(0"我");//插入字符串
            System.out.println(sb2);
            sb2.delete(02);//删除子字符串
            System.out.println(sb2);
            sb2.deleteCharAt(0).deleteCharAt(0);//删除某个字符
            System.out.println(sb2.charAt(0));//获取某个字符
            System.out.println(sb2.reverse());//字符串逆序
        }
    }

          执行结果如图8-11所示:

    图8-11 示例8-12运行效果图.png

  • 相关阅读:
    「10.10」神炎皇(欧拉函数)·降雷皇(线段树,DP)·幻魔皇
    「10.8」simple「数学」·walk「树上直径」
    10.5「嘟嘟噜」·「天才绅士少女助手克里斯蒂娜」·「凤凰院凶真」
    csp-s模拟测试59(10.4)「Reverse」(set)·「Silhouette」(容斥)
    csp-s模拟测试58「Divisors」·「Market」·「Dash Speed」
    csp-s模拟测试57(10.2)「天空龙」·「巨神兵」·「太阳神」
    csp-s模拟测试56(10.2)Merchant「二分」·Equation「树状数组」
    csp-s模拟测试55(9.29)联「线段树」·赛「??」题「神仙DP」
    消防(树上直径)
    模拟测试65
  • 原文地址:https://www.cnblogs.com/huaxiansheng/p/15316111.html
Copyright © 2011-2022 走看看