上一期我们研究了StringBuffer的构造方法---1.0那么现在来研究一下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
trueProcess 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.34Process 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
hellonullhadoopProcess 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
删除字符之后bigataProcess 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我的前任真好mysqlhadoophiveProcess 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的内容为:javahadoophiveETLsparkflinkProcess 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的内容为:javahadoophiveETLsparkflinkProcess finished with exit code 0
同理如果 start
小于零或大于此对象的长度,则会出现StringIndexOutOfBoundsException抛出String
方法来指示索引为负或大于字符串的大小异常。(这里就不举例了)
至此StringBuffer常用的功能介绍完毕(剩下自己研究)
到底啦!给靓仔一个关注吧!