StringBuffer的功能 API文档深入研究---2.0

上一期我们研究了StringBuffer的构造方法---1.0那么现在来研究一下StringBuffer有哪些功能吧。

目录

StringBuffer的添加功能

StringBuffer的插入功能

StringBuffer的删除功能

StringBuffer的替换功能

 StringBuffer的反转功能

 StringBuffer的截取功能


  • StringBuffer的添加功能

public StringBuffer append(String str)

查看API文档我们知道:

 我们观察API发现,不光可以追加字符串类型,还可以将任意数据类型添加到字符串缓冲区中,返回的是什么呢?返回的是字符串缓冲区本身。


参考代码1: 

public class StringBufferDemo1 {
    public static void main(String[] args) {
        
        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer();

        //public StringBuffer append(String str)
        StringBuffer stringBuffer = sb.append("hello");
        System.out.println(stringBuffer);
        System.out.println(sb);
        System.out.println(stringBuffer==sb);//true

    }
}

hello
hello
true

Process finished with exit code 0

  通过参考代码1我们知道 参数由该方法转换成一个字符串String.valueOf(数据类型),并在字符串后appended(追加)到此字符序列后。

参考代码2:

public class StringBufferDemo1 {
    public static void main(String[] args) {

        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer();

        //public StringBuffer append(String str)
        StringBuffer stringBuffer = sb.append("hello");
        System.out.println(stringBuffer);
        System.out.println(sb);
        System.out.println(stringBuffer==sb);//true

        sb.append(10);
        sb.append('a');
        sb.append(true);
        sb.append(12.34);
        System.out.println(sb);
        System.out.println(stringBuffer); //hello10atrue12.34

        //链式编程
        sb.append(10).append('a').append(true).append(12.34);
        System.out.println(sb);//hello10atrue12.3410atrue12.34

    }
}

hello
hello
true
hello10atrue12.34
hello10atrue12.34
hello10atrue12.3410atrue12.34

Process finished with exit code 0

  通过参考代码2可以看出,不光可以追加字符串类型,还可以将任意数据类型添加到字符串缓冲区中。


  • StringBuffer的插入功能

public StringBuffer insert(int offset,String str)

查看API我们知道:

 通过查看API发现不光可以插入字符串类型,还可以将任意数据类型插入到字符串缓冲区中。

参考代码:
 

public class StringBufferDemo1 {
    public static void main(String[] args) {

        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer();

        //public StringBuffer append(String str)
        StringBuffer stringBuffer = sb.append("hello");
        //public StringBuffer insert(int index,String str)

        sb.insert(5,"hadoop");
        System.out.println(sb);

        Object s = null;
        sb.insert(5,s);
        System.out.println(sb);

    }
}

hellohadoop
hellonullhadoop

Process finished with exit code 0

通过参考代码的运行结果我们看出:public StringBuffer insert(int index,String str)是将字符串插入到次字符序列中,返回的是字符串缓冲区本身,String参数的String按顺序插入到指定偏移量的该序列中,向上移动原始位于该位置的任何字符,并将该序列的长度增加到参数的长,如果str是null,则四个字符'null'被插入到该序列中。


  • StringBuffer的删除功能

public StringBuffer deleteCharAt(int index)

查看API文档我们知道:

public StringBuffer deleteCharAt(int index)

删除char在这个序列中的指定位置。 该序列缩短了一个char

注意:如果给定索引处的字符是补充字符,则此方法不会删除整个字符。 如果需要的准确处理增补字符,确定数量char通过调用删除Character.charCount(thisSequence.codePointAt(index)) ,其中thisSequence是此序列。

参数

index - 要删除的索引 char

结果

这个对象。

异常

StringIndexOutOfBoundsException - 如果 index为负数或大于或等于 length()

参考代码1:

public class StringBufferDemo1 {
    public static void main(String[] args) {

        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer("bigdata");
        //未删除字符之前
        System.out.println("未删除字符之前:" + sb);
//        StringBuffer sb2 = sb.deleteCharAt(3);
//        System.out.println("删除字符之后" + sb2);
        sb.deleteCharAt(3);
        System.out.println("删除字符之后" + sb);
        
    }
}

未删除字符之前:bigdata
删除字符之后bigata

Process finished with exit code 0

参考代码2:

public class StringBufferDemo1 {
    public static void main(String[] args) {

        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer("bigdata");
        //未删除字符之前
        System.out.println("未删除字符之前:" + sb);
//        StringBuffer sb2 = sb.deleteCharAt(3);
//        System.out.println("删除字符之后" + sb2);
        sb.deleteCharAt(3);
        System.out.println("删除字符之后" + sb);
        
        //StringIndexOutOfBoundsException
        System.out.println(sb.deleteCharAt(20));
        //StringIndexOutOfBoundsException
//        System.out.println(sb.deleteCharAt(-3));
    }
}

 运行结果:

 参考代码3:

public class StringBufferDemo1 {
    public static void main(String[] args) {

        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer("bigdata");
        //未删除字符之前
        System.out.println("未删除字符之前:" + sb);
//        StringBuffer sb2 = sb.deleteCharAt(3);
//        System.out.println("删除字符之后" + sb2);
        sb.deleteCharAt(3);
        System.out.println("删除字符之后" + sb);

        //StringIndexOutOfBoundsException
//        System.out.println(sb.deleteCharAt(20));
        //StringIndexOutOfBoundsException
        System.out.println(sb.deleteCharAt(-3));
    }
}

运行结果:

从参考代码2和参考代码3可以看出如果 index为负数或大于或等于 length()则会抛出StringIndexOutOfBoundsException

参考代码4:删除所有字符

public class StringBufferDemo3 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("bigdata");
        System.out.println("未删除字符之前:"+sb);
        sb.deleteCharAt(3);
//        StringBuffer sb2 = sb.deleteCharAt(3);
        System.out.println("删除字符之后:"+sb);
        //如果 index为负数或大于或等于 length() ,报错
//        sb.deleteCharAt(15);

        //public StringBuffer delete(int start,int end) [start,end)
        //删除此序列的子字符串中的字符。
        // 子串开始于指定start并延伸到字符索引end - 1 ,
        // 或如果没有这样的字符存在的序列的结束。
        // 如果start等于end ,则不作任何更改。
        //bigata
//        sb.delete(2,5);
//        sb.delete(2,6);
//        System.out.println(sb);


        //使用目前所学的技术删除所有的字符
        sb.delete(0,sb.length());
        System.out.println("删除所有的字符sb: "+sb);
    }
}

未删除字符之前:bigdata
删除字符之后:bigata
删除所有的字符sb: 

Process finished with exit code 0


  • StringBuffer的替换功能

查看API文档我们知道:

public StringBuffer replace(int start, int end, String str)

  用指定的String中的字符替换此序列的子字符串中的String 。 子串开始于指定start并延伸到字符索引end - 1 ,或如果没有这样的字符存在的序列的结束。 第一子串中的字符被去除,然后指定String被插入在start 。 (如果需要,此序列将被延长以容纳指定的字符串。)

参数

start - 开始索引,包括。

end - 结束索引,独家。

str - 将替换以前内容的字符串。

结果

这个对象。

异常

StringIndexOutOfBoundsException - 如果 start为负数,大于 length()或大于 end

参考代码1:

public class StringBufferDemo1 {
    public static void main(String[] args) {

        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer();

        //往StringBuffer中添加内容
        sb.append("hello").append("world").append("mysql").append("hadoop").append("hive");
        System.out.println(sb);
        
        //public StringBuffer replace(int start,int end,String str)

        //helloworldmysqlhadoophive
        //含头不含尾
        sb.replace(5,10,"我的前任真好");
        System.out.println(sb);

    }
}

helloworldmysqlhadoophive
hello我的前任真好mysqlhadoophive

Process finished with exit code 0

 通过运行结果我们知道public StringBuffer replace(int start,int end,String str)就是用指定的String中的字符替换此序列的子字符串中的String。子串开始于指定start并延伸到字符索引end-1,或如果没有这样的字符存在的序列的结束。

即第一子串中的字符被去除,然后指定String被插入在start。

 参考代码2:

public class StringBufferDemo4 {
    public static void main(String[] args) {
        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer();

        //往StringBuffer中添加内容
        sb.append("hello").append("world").append("mysql").append("hadoop").append("hive");
        System.out.println(sb);

        //public StringBuffer replace(int start,int end,String str)

        //helloworldmysqlhadoophive
        //含头不含尾
        sb.replace(2,200,"我的前任真好");
        System.out.println(sb);

    }
}

helloworldmysqlhadoophive
he我的前任真好

Process finished with exit code 0

  通过运行结果可以看出这里我们将end写到了200,此时并没有报错,而是将he后面的内容全部替换掉了。

参考代码3:

public class StringBufferDemo4 {
    public static void main(String[] args) {
        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer();

        //往StringBuffer中添加内容
        sb.append("hello").append("world").append("mysql").append("hadoop").append("hive");
        System.out.println(sb);

        //public StringBuffer replace(int start,int end,String str)

        //helloworldmysqlhadoophive
        //含头不含尾
        sb.replace(-5,10,"我的前任真好");
        System.out.println(sb);

    }
}

通过运行结果我们可以看出如果我们将start写成了负数,则会报错StringIndexOutOfBoundsException 字符串索引为负数异常


  •  StringBuffer的反转功能

查看API文档我们知道:

public StringBuffer reverse()

导致该字符序列被序列的相反代替。 如果序列中包含任何替代对,则将它们视为单个字符进行反向操作。 因此,高低替代品的顺序从未被扭转过。 在执行reverse方法之前,让n为该字符序列的字符长度(不是char值的长度)。 那么新字符序列中的索引k处的字符等于旧字符序列中的索引nk-1处的字符。

请注意,相反的操作可能会导致在手术之前产生不配对的低代理和高代谢的替代对。 例如,反转“\ uDC00 \ uD800”会生成“\ uD800 \ uDC00”,它是一个有效的代理对。

结果

对这个对象的引用。

 参考代码:

public class StringBufferDemo1 {
    public static void main(String[] args) {

        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer();
        sb.append("我爱写代码");
        System.out.println("反转前:");
        System.out.println(sb);

        System.out.println("反转后:");
        StringBuffer reverse = sb.reverse();
        System.out.println(sb);
        System.out.println(reverse);

    }
}

反转前:
我爱写代码
反转后:
码代写爱我
码代写爱我

Process finished with exit code 0

 通过运行结果我们知道public StringBuffer reverse()就是导致该字符序列被序列的相反代替,如果序列中包含任何替代对,则将它们视为单个字符进行反向操作。


  •  StringBuffer的截取功能

查看API文档我们知道:

String substring(int start)
public String substring(int start)

返回一个新的String ,其中包含此字符序列中当前包含的字符的子序列。 子串从指定的索引开始,并延伸到该序列的末尾。

参数

start - 开头索引(含)。

结果

新的字符串。

异常

StringIndexOutOfBoundsException - 如果 start小于零或大于此对象的长度。

 参考代码1:

public class StringBufferDemo1 {
    public static void main(String[] args) {

        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer();
        sb.append("java")
                .append("hadoop")
                .append("hive")
                .append("ETL")
                .append("spark")
                .append("flink");

        System.out.println(sb);

        //String substring(int start)
        String s1 = sb.substring(4);
        System.out.println("截取出来的字符串是:" + s1);
        System.out.println("StringBuffer的内容为:" + sb);

    }
}

 javahadoophiveETLsparkflink
截取出来的字符串是:hadoophiveETLsparkflink
StringBuffer的内容为:javahadoophiveETLsparkflink

Process finished with exit code 0

通过运行结果我们可以看出StringBuffer的String并没有发生改变,可以理解为将大串中的内容进行截取产生新的子字符串s1. 

参考代码2:

public class StringBufferDemo1 {
    public static void main(String[] args) {

        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer();
        sb.append("java")
                .append("hadoop")
                .append("hive")
                .append("ETL")
                .append("spark")
                .append("flink");

        System.out.println(sb);

        //String substring(int start)
        String s1 = sb.substring(50);
        System.out.println("截取出来的字符串是:" + s1);
        System.out.println("StringBuffer的内容为:" + sb);

    }
}

 参考代码3:

public class StringBufferDemo1 {
    public static void main(String[] args) {

        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer();
        sb.append("java")
                .append("hadoop")
                .append("hive")
                .append("ETL")
                .append("spark")
                .append("flink");

        System.out.println(sb);

        //String substring(int start)
        String s1 = sb.substring(-3);
        System.out.println("截取出来的字符串是:" + s1);
        System.out.println("StringBuffer的内容为:" + sb);

    }
}

 通过参考代码2和参考代码2可以看出,如果 start小于零或大于此对象的长度,则会出现StringIndexOutOfBoundsException抛出String方法来指示索引为负或大于字符串的大小异常。


String substring(int start, int end)

查看API文档我们知道:

public String substring(int start)

返回一个新的String ,其中包含此字符序列中当前包含的字符的子序列。 子串从指定的索引开始,并延伸到该序列的末尾。

参数

start - 开头索引(含)。

结果

新的字符串。

异常

StringIndexOutOfBoundsException - 如果 start小于零或大于此对象的长度。

参考代码:

public class StringBufferDemo1 {
    public static void main(String[] args) {

        //创建一个StringBuffer对象
        StringBuffer sb = new StringBuffer();
        sb.append("java")
                .append("hadoop")
                .append("hive")
                .append("ETL")
                .append("spark")
                .append("flink");

        System.out.println(sb);

        //String substring(int start, int end)  含头不含尾的 [start,end)
        //javahadoophiveETLsparkflink
        String s2 = sb.substring(10, 17);
        System.out.println("截取出来的字符串是:" + s2);
        System.out.println("StringBuffer的内容为:" + sb);

    }
}

javahadoophiveETLsparkflink
截取出来的字符串是:hiveETL
StringBuffer的内容为:javahadoophiveETLsparkflink

Process finished with exit code 0

 同理如果 start小于零或大于此对象的长度,则会出现StringIndexOutOfBoundsException抛出String方法来指示索引为负或大于字符串的大小异常。(这里就不举例了)


至此StringBuffer常用的功能介绍完毕(剩下自己研究) 


到底啦!给靓仔一个关注吧!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liangzai2048

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值