Java基础学习day16

阅读: 评论:0

Java基础学习day16

Java基础学习day16

StringBuffer

一、StringBuffer:

public final class StringBuffer
字符串缓冲区可供多个线程使用。
线程安全(没有出现同步操作,数据是安全的,但效率低),可变的字符序列。
字符串缓冲区类似于String ,但可以进行修改。

( 一)、StringBuffer 的构造方法

1、StringBuffer()
public StringBuffer() 构造一个字符串缓冲区,其中没有字符,初始容量为16个字符。
2、StringBuffer (int capacity)
public StringBuffer(int capacity) 构造一个字符串缓冲区,其中没有字符和指定的初始容量。
3、stringBuffer(String str)
public StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。字符串缓冲区的初始容量是16加上字符串参数的长度。StringBuffer的方法:
public int capacity()返回当前容量。容量是新插入可用的存储量,超过此值将重新分配。
public int length() 返回长度(字符数)。
public class StringBufferDemo {public static void main(String[] args) {StringBuffer sb = new StringBuffer();System.out.println("sb的实际存储字符数:"+ sb.length());System.out.println("sb的容量为:" + sb.capacity());System.out.println("===============================");//StringBuffer (int capacity)StringBuffer sb2 = new StringBuffer(50);System.out.println("sb2的实际存储字符数:"+ sb2.length());System.out.println("sb2的容量为:" + sb2.capacity());System.out.println("================================");//stringBuffer(String str)StringBuffer sb3 = new StringBuffer("laoshuaini");System.out.println("sb3的实际存储字符数:"+ sb3.length());System.out.println("sb3的容量为:" + sb3.capacity());//本身字符串长度加上初始化容量长度System.out.println(sb3);}
}

(二)、 添加功能

   1、 public StringBuffer append(String str)将指定的字符串追加到此字符序列。2、 public StringBuffer insert(int offset,String str)将字符串插入此字符序列。
public class StringBufferDemo2 {public static void main(String[] args) {//创建StingBuffer对象StringBuffer sb = new StringBuffer("hello");sb.append("world").append("Java");//链式编程System.out.println(sb);System.out.println("==============================");//StringBuffer不仅可以增加String类型的,还可以增加char、int、long等类型//但需注意,无论添加之前是什么类型,添加之后都是字符,最终组合成字符串//就算是true,添加进StringBuffer中,输出后都是‘t’、‘r’、‘u’、‘e’四个字符组成的字符串Demo demo = new Demo();sb.append(demo);//添加的是引用数据类型类中toString()的结果System.out.println(sb);System.out.println("===============================");//public StringBuffer insert(int offset,String str)//        将字符串插入此字符序列。StringBuffer sb3 = new StringBuffer("hello");sb3.insert(3,"he");//String参数的字符按顺序插入到指定偏移量的此序列中,// 向上移动最初位于该位置上方的任何字符,并将该序列的长度增加参数的长度。System.out.println(sb3);}
}
class Demo{private String name;public Demo() {}public Demo(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Demo{" +"name='" + name + ''' +'}';}
}

(三)、删除功能:

1、 public StringBuffer deleteCharAt(int index)按此顺序删除指定位置的char 。
2、 public StringBuffer delete(int start,int end)删除此序列的子字符串中的字符。 子字符串从指定的start开始,如果不存在这样的字符,则扩展到索引end - 1处的字符或序列的末尾。  如果start等于end ,则不进行任何更改。异常:StringIndexOutOfBoundsException -如果 start为负数,大于 length() ,或大于 end 。 
public class StringBufferDemo3 {public static void main(String[] args) {StringBuffer sb = new StringBuffer("woaidashuju");System.out.println(sb);System.out.println("sb的实际存储字符的个数:" + sb.length());System.out.println("======删除字符后============");
//        sb.deleteCharAt(4);
//        System.out.println(sb);
//        System.out.println("sb实际存储字符个数:"+ sb.length());System.out.println("======指定位置删除============");sb.delete(3,5);System.out.println(sb);  //删除数为(3,5]内字符}}

(四)、 替换功能

    public StringBuffer replace(int start,int end,String str)使用指定的String的字符替换此序列的子字符串中的字符。子字符串从指定的start开始,并且如果不存在这样的字符,则扩展到索引end - 1处的字符或序列的末尾。首先删除子字符串中的字符,然后在String插入指定的start 。(如果需要,将延长此序列以容纳指定的字符串。)
public class StringBufferDemo4 {public static void main(String[] args) {//创建一个StringBuffer对象StringBuffer sb = new StringBuffer("hellowol");System.out.println(sb);System.out.println("=====指定位置替换字符==============");
//        sb.replace(2,6,"wove");// 从[2,6)开始替换,含头不含尾
//        System.out.println(sb);
//        sb.replace(15,20,"hello");
//        System.out.println(sb);//StringIndexOutOfBoundsException: start > length()sb.replace(1,3,"jkoi");System.out.println(sb);// 插入的字符长度大于删除的字符长度}}

(五)、反转功能

    public StringBuffer reverse()导致此字符序列被序列的反向替换。 如果序列中包含任何代理对,则将这些代理对视为反向操作的单个字符。设n是执行reverse方法之前的该字符序列的字符长度(不是char值中的长度)。然后,新字符序列中索引k处的字符等于旧字符序列中索引nk-1处的字符。
public class StringBufferDemo5 {public static void main(String[] args) {//创建StringBuffer对象StringBuffer sb = new StringBuffer();sb.append("我爱晗鹿");System.out.println(sb);sb.reverse();System.out.println("反转之后:" + sb);}
}

(六)、 截取功能

  1、  public String substring(int start)返回一个新的String ,其中包含此字符序列中当前包含的字符的子序列。子字符串从指定的索引开始并延伸到此序列的末尾。2、   public CharSequence subSequence(int start, int end)返回一个新的字符序列,
public class StringBufferDemo6 {public static void main(String[] args) {StringBuffer sb = new StringBuffer();sb.append("hello").append("world").append("java").append("spark");System.out.println(sb);String sb1 = sb.substring(6);System.out.println("截取字符为:"+sb1 );System.out.println("截取后原字符为:"+sb);System.out.println("==============================");String sb3 = sb.substring(5, 10);System.out.println(sb3);System.out.println("截取后原字符为:"+ sb);System.out.println("=========将StringBuffer类型转换为String类型=================");String sb4 = sb.substring(0);System.out.println(sb4);//System.out.println(sb==sb4);//java: 不可比较的类型: java.lang.StringBuffer和java.lang.String}
}

(七)、 String类型与StringBuffer类型之间的相互转换

    A,BA--B ,将A类型转换成B类型,目的是为了使用B类型中的功能B--A ,再将B转换成A类型 ,目的可能是最终的结果需要A类型,所以将它再次转换。
public class StringBuffer7 {public static void main(String[] args) {//String --StringBuffer (将String转换为StringBuffer,在StringBuffer中寻找方法,)String s = "hello";//方法一:构造方法StringBuffer sb = new StringBuffer(s);System.out.println(sb);//方法二:使用StringBuffer中append方法StringBuffer sb1 = new StringBuffer();sb1.append(s);System.out.println(sb1);//判断sb与sb1是否转换为String类型System.out.println(s.equals(sb));System.out.println(s.equals(sb1));System.out.println("=============================");//StringBuffer--StringStringBuffer sb2 = new StringBuffer("hellowo");//方法一:StringBuffer 中的截取方法
//        sb2.substring(0);
//        System.out.println(sb2);//方法二:toString()方法 --最常用的方法
//        String s1 = String();
//        System.out.println(s1);//public String(StringBuffer buffer)//分配一个新字符串String s2 = new String(sb2);System.out.println(s2);}
}

(八)、String与StringBuffer作为参数传递的区别

public class StringBufferDemo8 {public static void main(String[] args) {String s1 = "hello";
//        String s2 = "world";
//        System.out.println("s1:" + s1 + ",s2:" + s2); // s1:hello,s2:world
//        change(s1, s2);
//        System.out.println("s1:" + s1 + ",s2:" + s2); // s1: hello ,s2: world//但凡new出来的都在堆内存中,// StringBuffer类append之后 ,返回的是什么StringBuffer sb1 = new StringBuffer("hello");StringBuffer sb2 = new StringBuffer("world");System.out.println("sb1:" + sb1 + ",sb2:" + sb2); //sb1: hello  ,sb2: worldchange(sb1,sb2);System.out.println("sb1:" + sb1 + ",sb2:" + sb2); // sb1: hello  ,sb2: worldworld}// 当StringBuffer作为参数传递的时候,谁进行了操作,谁就发生了变化public static void change(StringBuffer sb1,StringBuffer sb2){sb1 = sb2;sb2 = sb1.append(sb2);System.out.println("sb1:" + sb1 + ",sb2:" + sb2); // sb1: worldworld  ,sb2: worldworld}public static void change(String s1, String s2) {s1 = s2;s2 = s1 + s2;System.out.println("s1:" + s1 + ",s2:" + s2); //s1: world ,s2:worldworld}
}

本文发布于:2024-02-01 21:32:02,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170679432239543.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:基础   Java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23