栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

十七、StringBuilder类和StringBuffer类【20220630】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

十七、StringBuilder类和StringBuffer类【20220630】

StringBuilder类

public final class StringBuilder
extends Object
implements Serializable, CharSequence

StringBuilder类是final修饰的没有子类,不能被继承。
StringBuilder类表示一个可变的字符序列,不保证线程同步。

StringBuilder类的构造方法

  1.StringBuilder()创建一个初始容量为16个字符的空StringBuilder对象。
  2.StringBuilder(String str)创建一个初始值为指定字符串内容的StringBuilder对象。  
  3.StringBuilder(int capacity)创建一个指定初始容量的空StringBuilder对象。

package com.wangxing.stringbuilderdemo1;
public class TestMain1 {
	public static void main(String[] args) {
		
		//StringBuilder()创建一个初始容量为16个字符的空StringBuilder对象。
		StringBuilder str1=new StringBuilder();
		//StringBuilder(String str)创建一个初始值为指定字符串内容的StringBuilder对象。  
		StringBuilder str2=new StringBuilder("hello");
		String  teststr="world";
		StringBuilder str3=new StringBuilder(teststr);
		//StringBuilder(int capacity)创建一个指定初始容量的空StringBuilder对象。
		StringBuilder str4=new StringBuilder(20);
	}
}
StringBuilder类的常用方法

1.StringBuilder append(Object o)
   将参数中指定的数据追加到StringBuilder表示的字符序列的末尾中。
   append方是重载的,以便接受任何类型的数据,可以有效地将给定的数据转换为字符串。
2.int capacity()返回当前容量。
3.char charAt(int index)得到元素字符串中指定位置的字符数据  
4.StringBuilder delete(int start, int end)删除指定开始位置和指定结束位置之间的子字符串.
5.StringBuilder deleteCharAt(int index) 删除元素字符串中指定位置上的字符。
6.int indexOf(String str)得到指定字符串在原始字符串中第一次出现的位置
7.int lastIndexOf(String str)得到指定字符串在原始字符串中最后一次出现的位置
8.StringBuilder insert(int index,Object o)将指定的数据插入到原始字符串中指定的位置。
   insert方是重载的,以便接受任何类型的数据,可以有效地将给定的数据转换为字符串。
9.int length() 返回长度(字符数)。  
10.StringBuilder replace(int start, int end, String str)使用指定的字符串替换开始位置和结束位置之       间的字符串  
11.StringBuilder reverse()反转字符串【????】
12.void setCharAt(int index, char ch)使用指定的字符数据替换原始字符串中指定位置的字符
13.String substring(int start)从原始字符串的指定开始位置截取到结束之间的子字符串.【String】 14.String substring(int start, int end)从原始字符串的指定开始位置截取到结束位置之间的子字符         串. 【String】  
15.String toString() 将StringBuilder可变字符串转换成String不可变字符串。

package com.wangxing.stringbuilderdemo1;
public  class TestMain2 {
	public static void main(String[] args) {
		StringBuilder  str1=new StringBuilder();
		//1.StringBuilder append(Object o)
		//将参数中指定的数据追加到StringBuilder表示的字符序列的末尾中。
		//append方是重载的,以便接受任何类型的数据,可以有效地将给定的数据转换为字符串。
		str1.append(true);
		str1.append(1001);
		str1.append("hello");
		str1.append(12.5);
		str1.append("hello");
		System.out.println("str1=="+str1);
		//2.int capacity()返回当前容量。
		//System.out.println("str1=="+str1.capacity());
		//3.char charAt(int index)得到元素字符串中指定位置的字符数据 
		//System.out.println("str1=="+str1.charAt(1));
		//4.StringBuilder delete(int start, int end)删除指定开始位置和指定结束位置之间的子字符串.
		//System.out.println("str1=="+str1.delete(8,13));
		//5.StringBuilder deleteCharAt(int index) 删除元素字符串中指定位置上的字符。
		//System.out.println("str1=="+str1.deleteCharAt(15));
		//6.int indexOf(String str)得到指定字符串在原始字符串中第一次出现的位置
		//System.out.println("str1=="+str1.indexOf("world"));
		//7.int lastIndexOf(String str)得到指定字符串在原始字符串中最后一次出现的位置   
		//System.out.println("str1=="+str1.lastIndexOf("hello"));
		//8.StringBuilder insert(int index,Object o)将指定的数据插入到原始字符串中指定的位置。
		//System.out.println("str1=="+str1.insert(str1.lastIndexOf("1"),"world"));
		//9.int length() 返回长度(字符数)。
		//System.out.println("str1=="+str1.length());
		//10.StringBuilder replace(int start, int end, String str)使用指定的字符串替换开始位置和结束位置之间的字符串  
		//int startindex=str1.indexOf("h");
		//int endindex=startindex+5;
		//System.out.println("str1=="+str1.replace(startindex,endindex,"world"));
		//11.StringBuilder reverse()反转字符串
		//System.out.println("str1=="+str1.reverse());
		//12.void setCharAt(int index, char ch)使用指定的字符数据替换原始字符串中指定位置的字符
		//str1.setCharAt(0,'A');
		//System.out.println("str1=="+str1);
		//13.String substring(int start)从原始字符串的指定开始位置截取到结束之间的子字符串.【String】 
		//14.String substring(int start, int end)从原始字符串的指定开始位置截取到结束位置之间的子字符串.【String】 
		//String sunstr=str1.substring(str1.lastIndexOf("1"),str1.lastIndexOf("1")+4);
		//System.out.println("sunstr=="+sunstr);
		//15.String toString() 将StringBuilder可变字符串转换成String不可变字符串。
		System.out.println("toString=="+str1.toString());
	}
}
StringBuilder可变字符串与String不可变字符串转换的转换

StringBuilder可变字符串---》String不可变字符串
  1.StringBuilder的toString()方法
  2.String类的构造方法String(StringBuilder builder)

String不可变字符串---》StringBuilder可变字符串
  StringBuilder类的构造方法StringBuilder(String str)

StringBuffer类

public final class StringBuffer
extends Object
implements Serializable, CharSequence

StringBuffer类是final修饰的没有子类,不能被继承。
StringBuffer类表示一个可变的字符序列,保证线程同步。

StringBuffer类的构造方法

  1.StringBuffer()创建一个初始容量为16个字符的空StringBuffer对象。
  2.StringBuffer(String str)创建一个初始值为指定字符串内容的StringBuffer对象。  
  3.StringBuffer(int capacity)创建一个指定初始容量的空StringBuffer对象。

StringBuffer类的常用方法

1.StringBuffer append(Object o)
   将参数中指定的数据追加到StringBuffer表示的字符序列的末尾中。
   append方是重载的,以便接受任何类型的数据,可以有效地将给定的数据转换为字符串。
2.int capacity()返回当前容量。
3.char charAt(int index)得到元素字符串中指定位置的字符数据  
4.StringBuffer delete(int start, int end)删除指定开始位置和指定结束位置之间的子字符串.
5.StringBuffer deleteCharAt(int index) 删除元素字符串中指定位置上的字符。
6.int indexOf(String str)得到指定字符串在原始字符串中第一次出现的位置
7.int lastIndexOf(String str)得到指定字符串在原始字符串中最后一次出现的位置
8.StringBuffer insert(int index,Object o)将指定的数据插入到原始字符串中指定的位置。
   insert方是重载的,以便接受任何类型的数据,可以有效地将给定的数据转换为字符串。
9.int length() 返回长度(字符数)。  
10.StringBuffer replace(int start, int end, String str)使用指定的字符串替换开始位置和结束位置之         间的字符串  
11.StringBuffer reverse()反转字符串【????】
12.void setCharAt(int index, char ch)使用指定的字符数据替换原始字符串中指定位置的字符
13.String substring(int start)从原始字符串的指定开始位置截取到结束之间的子字符串.【String】 14.String substring(int start, int end)从原始字符串的指定开始位置截取到结束位置之间的子字符         串. 【String】  
15.String toString() 将StringBuffer可变字符串转换成String不可变字符串。

StringBuffer可变字符串与String不可变字符串转换的转换

StringBuffer可变字符串---》String不可变字符串
  1.StringBuffer的toString()方法
  2.String类的构造方法 String(StringBuffer buffer)

String不可变字符串---》StringBuffer可变字符串
  StringBuffer类的构造方法StringBuffer(String str)

1.String、StringBuilder、StringBuffer的区别?

(1)String是不可变字符串;StringBuilder、StringBuffer可变字符串
(2)String、StringBuffer是线程安全,StringBuilder非线程安全
(3)String不适合大量字符串的拼接,在JDK1.8时字符串常量拼接被自动优化成了StringBuiler
    StringBuilder适合单线程情况下大量字符串的拼接
    StringBuffer适合多线程大量字符串的拼接
(4)执行速度String(慢) < StringBuffer(较快) < StringBuilder(快)
(5)String[JDK1.0], StringBuffer[JDK1.0 ],StringBuilder[[JDK1.5 ]

String重写了Object类中的equals、hashCode方法

2."=="与equals方法的区别?

(1)"=="是比较运算符;equals是java.lang.Object类中的方法。
(2)"=="可以比较两个基本数据类型的变量是否相等,比较的是基本数据类型的数据值是否相等,
    "=="也可以比较两个引用数据类型的变量是否相等,只是比较的是引用数据类型所指向的对象的地址是否相等
(3)equals方法不能比较两个基本数据类型的变量是否相等,
    equals方法可以比较两个引用数据类型的变量是否相等,默认情况下比较的是引用数据类型变量所指向的对象的地址是否相等;equals方法被重写之后,比较的是引用数据类型变量所指向的对象的内容是否相等。

3.String s1 = new String("abc")到底创建了几个对象?

要想充分了解创建了几个对象,我们需要了解JVM底层原理,String s1 = new String("abc")
分别在栈,堆,常量池的位置。
在JDK1.6即以前,常量池位于JVM的方法区中。
在JDK1.7即以后,常量池放在堆区中。        
创了两个对象:一个是堆空间中new结构[new String()]
                       一个是常量池中的数据:"abc"
String s1="abc";到底创建了几个对象?
创建了一个对象,就是常量池中的数据"abc"。

4.如何将字符串数据反转?

(1)利用字符串的拼接(charAt()方法),把后遍历出来的放在前面即可实现反转

public static String charAtReverse (String s){
   int length = s.length();
   String reverse = " ";
   for (int i = 0; i < length; i++) {
     //字符串中获取单个字符的字符的放法
     reverse = s.charAt(i)+reverse;
   }
   return reverse;
}

(2)利用字符串的拼接(toCharArray()处理成字符数组的方法),把后遍历出来的放在前面即可实现反转

public static String reverseCharArrays(String s){
   char []array = s.toCharArray();//把字符串分割成单个字符的数组
   String reverse = "";
   for(int i = array.length -1 ; i>=0 ; i--){
	//遍历数组,从后向前拼接
    reverse +=array[i];
   }
   return reverse;
}

(3)利用StringBuffer的reverse()方法

public static String reverseStringBuffer(String s){
   StringBuffer sb = new StringBuffer(s);
   String afterReverse = sb.reverse().toString();
   return afterReverse;
  }

(4)利用递归的方法,类似与二分查找的折半思想

public static String reverseRecursive(String s){
   int length = s.length();
   if(length<=1){
    return s;
   }
   String left  = s.substring(0,length/2);
   String right = s.substring(length/2 ,length);
   //此处是递归的方法调用
   String afterReverse = reverseRecursive(right)+reverseRecursive(left);
  return  afterReverse;
} 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005303.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号