zoukankan      html  css  js  c++  java
  • 字符串处理(二)

    二、字符串缓存类StringBuffer

    StringBuffer构造函数表

    StringBuffer()
              构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
    StringBuffer(CharSequence seq)
              public java.lang.StringBuilder(CharSequence seq) 构造一个字符串缓冲区,它包含与指定的 CharSequence 相同的字符。
    StringBuffer(int capacity)
              构造一个不带字符,但具有指定初始容量的字符串缓冲区。
    StringBuffer(String str)
              构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

    常用构造函数的使用:(可以看出StringBuffer的长度是可变的)

     1 public class javaTest2 implements javaTest1 {
     2 
     3 public static void main(String[] args) {
     4 
     5     StringBuffer strb=new StringBuffer("aaa");
     6     System.out.println(strb);
     7     StringBuffer strb1=new StringBuffer(15);
     8     StringBuffer strb2=new StringBuffer();
     9     System.out.println("strb'length:"+strb.length()+"   strb1'length:"
    10                           +strb1.length()+"   strb2'length:"+strb2.length());
    11     strb2.append("aa");
    12     System.out.println("strb2's length:"+strb2.length());
    13     
    14   }
    15 }

    运行结果:

     1 aaa

    2 strb'length:3 strb1'length:0 strb2'length:0

    3 strb2's length:2 

    字符串缓存可以被多个线程安全的使用。它的方法使用synchronized修饰。这些方法可以在需要的时候可以同步执行,因而任一特定实力的所有操作就好像是以串行的次序发生的。

    1.StringBuffer的特点

            ①他可以对字符串进行修改

            ②长度可变

            ③可以操作多种数据类型

            ④与String相似,拥有String类的大多数方法,可以通过toString()方法变成字符串。

    2.StringBuffer的功能

    (1)存储

            1>append(数据)

            Append()可以接收各种数据类型,除了byte和short,但是int可以替代两者,此类方法返回的还是本类对象,因为StringBuffer是可以被改变的,无需像String一样返回一个新的字符串。

            2>inset(int offset,数据)

            此方法依旧是在本类对象中修改,offset指定是在此位置插入后面的数据。

    (2)删除

            1> delete(int start,int end)

            返回本类对象,删除从start到end-1位置上的字符(包头不包尾)。

            2> deleteCharAt(int index)

            返回本类对象,删除指定位置index上的字符。

    (3)获取

            1> substring(int start,int end)

            返回的String类型,不是StringBuffer,依旧是截取从Strart到end-1这段字符串。

            2> chatAt(int index)

            返回字符类型,根据指定位置查找该位上的字符

            3> indexOf(String str)

            返回int类型,获取子串str在缓冲区中的起始位置

            4> lastIndexOf(String str)

            返回int类型,获取子串最后一次出现在缓冲区中的具体位置

    (4)修改

            1> replace(int start,int end,String str)

            返回本类对象,将从start到end-1的这段字符串替换成str。

            2> setCharAt(int index,char ch)

            无返回值,将指定位置index上的元素替换为ch。

    (5)反转

            reverse()

            返回本类对象,将缓冲区中的内容反转过来。

    常用方法使用

     1 public class javaTest2 implements javaTest1 {
     2 
     3 public static void main(String[] args) {
     4 
     5     //字符串和字符串缓存的相互转换
     6     String a="aaabbbccc";
     7     StringBuffer strb=new StringBuffer(a);
     8     System.out.println("strb(字符串缓存):"+strb);
     9     String b=strb.toString();
    10     System.out.println("b(字符串):"+b);
    11     
    12     
    13     //存储(注:appand插在字符的尾部,insert是插在指定位置之前)
    14     //(扩充appand)
    15     strb.append(true);
    16     System.out.println("strb扩充后1:"+strb);
    17     strb.append("ddd");
    18     System.out.println("strb扩充后2:"+strb);
    19     char []c={'e','e','e'};
    20     strb.append(c, 0, 2);
    21     System.out.println("strb扩充后3:"+strb);
    22     
    23     //插入insert
    24     strb.insert(0, '~');
    25     System.out.println("strb插入后1:"+strb);
    26     strb.insert(0, "~~");
    27     System.out.println("strb插入后2:"+strb);
    28     char []c1={'&','&','&'};
    29     strb.insert(6, c1, 0, 3);
    30     System.out.println("strb插入后3:"+strb);
    31     
    32     //返回当前内容的长度
    33     System.out.println("strb's length:"+strb.length());
    34     
    35     //查找(返回第i位置处的字符)
    36     System.out.println("strb's "+"2th "+"character is "+strb.charAt(2));
    37     
    38     //截取(返回内容中从位置start到结束的部分。同String.substring(int start))两种
    39     String str=strb.substring(5);
    40     System.out.println("截取的部分str为:"+str);
    41     String str1=strb.substring(5,9);
    42     System.out.println("截取的部分str1为:"+str1);
    43     
    44     //查询字符串位置
    45     System.out.println("查询的字符串&&第一次出现在strb的位置为:"+strb.indexOf("&&"));
    46     System.out.println("查询的字符串&&最后一次出现在strb的位置为:"+strb.lastIndexOf("&&"));
    47     
    48     //替代(也会改变目标字符)
    49     StringBuffer strb1=strb.replace(0, 3, "");
    50     System.out.println("替换后的strb: "+strb);
    51     System.out.println("替换后的strb1:"+strb1);
    52     
    53     //删除
    54     System.out.println("删除操作后的strb:"+strb.delete(3, 6));
    55     
    56     //返回当前空间的大小  如果空间满了会自动扩展
    57     System.out.println( "strb's space:"+strb.capacity());
    58     
    59     //翻转
    60     System.out.println("strb的翻转:"+strb.reverse());
    61 
    62   }
    63 }

    运行结果:

     1 strb(字符串缓存):aaabbbccc
     2 b(字符串):aaabbbccc
     3 strb扩充后1:aaabbbccctrue
     4 strb扩充后2:aaabbbccctrueddd
     5 strb扩充后3:aaabbbccctruedddee
     6 strb插入后1:~aaabbbccctruedddee
     7 strb插入后2:~~~aaabbbccctruedddee
     8 strb插入后3:~~~aaa&&&bbbccctruedddee
     9 strb's length:24
    10 strb's 2th character is ~
    11 截取的部分str为:a&&&bbbccctruedddee
    12 截取的部分str1为:a&&&
    13 查询的字符串&&第一次出现在strb的位置为:6
    14 查询的字符串&&最后一次出现在strb的位置为:7
    15 替换后的strb: aaa&&&bbbccctruedddee
    16 替换后的strb1:aaa&&&bbbccctruedddee
    17 删除操作后的strb:aaabbbccctruedddee
    18 strb's space:25
    19 strb的翻转:eedddeurtcccbbbaaa

    3. StringBuilder

            StringBuilder可以看做是StringBuffer的简易替换,他们的功能一样用法一样。区别在于StringBuffer是线程同步的,而StringBuilder是线程不同步的。所以当我们的程序中只有一个线程时我们使用StringBuilder,这样效率高。

    总结:

    其实如果把String类型看成一个基本类型的话,这样StringBuffer和StringBuilder就类似于其包装类。(个人看法~)

  • 相关阅读:
    Go的50坑:新Golang开发者要注意的陷阱、技巧和常见错误[2]
    Go的50坑:新Golang开发者要注意的陷阱、技巧和常见错误[1]
    进程和线程
    Linux 技巧:让进程在后台可靠运行的几种方法
    Linux 网络命令必知必会之 tcpdump,一份完整的抓包指南请查收!
    这些好用的 Chrome 插件,提升你的工作效率
    golang学习笔记-go mod的使用
    性能监控和分析工具---nmon
    Jenkins
    程序员画图工具总结
  • 原文地址:https://www.cnblogs.com/xiaotiaosi/p/6381513.html
Copyright © 2011-2022 走看看