目录
在StringBuilder存储区指定偏移位置处插入指定的字符串
Java SE文章参考:Java SE入门及基础知识合集-CSDN博客
StringBuilder 和 StringBuffer
1. 特性介绍
- StringBuilder 类位于 java.lang 包中,无需引入,直接使用即可。
- StringBuilder 类是由 final 修饰的,表示 StringBuilder 是一个最终类,不可能被继承
- StringBuilder 类构建的对象,可以实现字符序列的追加,但不会产生新的对象,只是将这个字符序列保存在字符数组中。
2. 构造方法
public StringBuilder (); // 构建一个 StringBuilder 对象,默认容量为 16public StringBuilder ( int capacity ); // 构建一个 StringBuilder 对象并指定初始化容量public StringBuilder ( String str ); // 构建一个 StringBuilder 对象,并将指定的字符串存储在其中
示例
package com . we . builder ;public class Example1 {public static void main ( String [] args ) {StringBuilder sb1 = new StringBuilder (); // 构建了一个初始化容量为 16 的字符串构建器StringBuilder sb2 = new StringBuilder ( 1024 ); // 构建了一个初始化容量为1024的字符串构建器StringBuilder sb3 = new StringBuilder ( "你好吗 " );}}
3. 常用方法
追加
public StringBuilder append ( String str ); // 将一个字符串添加到 StringBuilder 存储区public StringBuilder append ( StringBuffer sb ); // 将 StringBuffer 存储的内容添加StringBuilder存储区
删除指定区间存储的内容
public StringBuilder delete ( int start , int end ); // 将 StringBuilder 存储区指定的开始位置到指定的结束位置之间的内容删除掉
删除存储区指定下标位置存储的字符
public StringBuilder deleteCharAt ( int index );
在StringBuilder存储区指定偏移位置处插入指定的字符串
public StringBuilder insert ( int offset , String str );
将存储区的内容倒序
public StringBuilder reverse ();
获取指定字符串在存储区中的位置
public int indexOf ( String str ); // 获取指定字符串在存储区中第一次出现的位置public int lastIndexOf ( String str ); // 获取指定字符串在存储区中最后一次出现的位置
练习
现有字符串 ababababababababa
,求其中子字符串
aba
出现的次数(使用
String
类完成)
package com . we . exercise ;public class Exercise1 {public static void main ( String [] args ) {String s = "ababababababababa" ;String target = "aba" ;int times = 0 ; // 记录出现次数int length = s . length (); // 字符串的长度int targetLength = target . length (); // 目标字符串的长度int maxIndex = length - targetLength ; // 遍历字符串时最大下标for ( int i = 0 ; i <= maxIndex ; i ++ ){String s1 = s . substring ( i , i + targetLength ); // 截取字符串if ( s1 . equals ( target )){times ++ ;}}System . out . println ( times );}}
将从控制台输入的数字转换为财务数字(10,005.25
)
(
使用
StringBuilder
完成
)
public class Exercise2 {public static void main ( String [] args ) {Scanner sc = new Scanner ( System . in );System . out . println ( " 请输入一个数字: " );double money = sc . nextDouble ();StringBuilder builder = new StringBuilder ();builder . append ( money );//找到小数点的位置int index = builder . indexOf ( "." );//小数点前面的数字才需要处理if ( index > 3 ){for ( int i = index - 3 ; i > 0 ; i -= 3 ){builder . insert ( i , "," );}}System . out . println ( builder . toString ());}}
4. 对比 String
String 、
StringBuilder
和
StringBuffer
都是用来处理字符串的。在处理少量字符串的时候,它们之间的处理效率几乎没有任何区别。但在处理大量字符串的时候,由于 String
类的对象不可再更改,因此在处理字符串时会产生新的对象,对于内存的消耗来说较大,导致效率低下。而 StringBuilder和 StringBuffer
使用的是对字符串的字符数组内容进行拷贝,不会产生新的对象,因此效率较高。而StringBuffer 为了保证在多线程情况下字符数组中内容的正确使用,在每一个成员方法上面加了锁,有锁就会增加消耗,因此 StringBuffer
在处理效率上要略低于
StringBuilder
。