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

  • 相关阅读:
    LeetCode 109 Convert Sorted List to Binary Search Tree
    LeetCode 108 Convert Sorted Array to Binary Search Tree
    LeetCode 107. Binary Tree Level Order Traversal II
    LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode 103 Binary Tree Zigzag Level Order Traversal
    LeetCode 102. Binary Tree Level Order Traversal
    LeetCode 104. Maximum Depth of Binary Tree
    接口和多态性
    C# 编码规范
  • 原文地址:https://www.cnblogs.com/huaxiansheng/p/15316111.html
Copyright © 2011-2022 走看看