1.StringBuffer类概述在Java中我们如果对字符串进行拼接操作,每次拼接都能构建一个新的String对象,这样操作既费时有浪费时间,StringBuffer类就能解决这个问题。StringBuffer(字符串缓冲区)是线程安全的可变字符序列,一个类似于String的字符串缓冲区。public class MyTest { public static void main(String[] args) { //通过加号来进行字符串的拼接 String s...
1.StringBuffer类概述
在Java中我们如果对字符串进行拼接操作,每次拼接都能构建一个新的String对象,这样操作既费时有浪费时间,StringBuffer类就能解决这个问题。
- StringBuffer(字符串缓冲区)是线程安全的可变字符序列,一个类似于String的字符串缓冲区。
public class MyTest {
public static void main(String[] args) {
String s1="kobe";
String s2="是著名的篮球运动员";
String s3=s1+s2;
System.out.println(s3);
System.out.println("==========");
StringBuffer sb = new StringBuffer();
sb.append("kobe");
sb.append("是著名的篮球运动员");
System.out.println(sb);
}
2.StringBuffer类的方法
2.1 StringBuffer类的构造方法
StringBuffer类的构造方法 |
含义 |
public StringBuffer() |
无参构造方法 |
public StringBuffer(int capacity) |
指定容量的字符串缓冲区对象 |
public StringBuffer(String str) |
指定字符串内容的字符串缓冲区对象 |
public class MyTest2 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
int capacity = sb.capacity();
System.out.println(capacity);
StringBuffer buffer = new StringBuffer(25);
int capacity1 = buffer.capacity();
System.out.println(capacity1);
buffer.append("lalalalalalalalalalalalalalalalalalalalalalal");
System.out.println(buffer);
String s="科比是一名著名的篮球运动员";
StringBuffer sb1 = new StringBuffer(s);
System.out.println(sb1);
}
}
2.2 StringBuffer类的获取长度与容量的方法
在这里注意介绍的是StringBuffer类中的两个容易混淆的方法:
StringBuffer的方法 |
含义 |
public int capacity() |
返回当前容量 |
public int length() |
返回长度(字符数) |
public class MyTest3 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("hello");
int length = sb.length();
System.out.println(length);
int capacity = sb.capacity();
System.out.println(capacity);
}
}
可以这样理解capacity()方法与length()方法,例如一个水杯的容量为500ml,实际上你接了200ml的水。这时你可以将capacity()方法视为这个水杯的总容量,而length()方法指的是你接的水量。而与此实例唯一不同的是,StringBufffer这个容器,当你添加的字符数超过容量时,会进行自动扩容的现象。
2.3 StringBuffer的添加功能
StringBuffer的添加功能 |
含义 |
public StringBuffer append(String str) |
可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身 |
public StringBuffer insert(int offset,String str) |
在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身 |
public class MyTest4 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
StringBuffer sb2 = sb.append(100);
StringBuffer sb3 = sb.append("hello").append(123).append(true).append(3.225);
String s = sb3.toString();
System.out.println(s);
}
};
public class MyTest5 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("我爱你");
sb.insert(0,123);
System.out.println(sb);
sb.insert(0,"abc").insert(3,"lpom");
System.out.println(sb);
}
}
2.4 StringBuffer的删除功能
StringBuffer的删除功能 |
含义 |
public StringBuffer deleteCharAt(int index) |
删除指定位置的字符,并返回本身 |
public StringBuffer delete(int start,int end) |
删除从指定位置开始指定位置结束的内容,并返回本身 |
public class MyTest6 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("科比是一名著名的篮球运动员");
sb.deleteCharAt(3);
System.out.println(sb);
sb.delete(3,7);
System.out.println(sb);
}
}
2.5 StringBuffer的替换与反转功能
StringBuffer的替换与反转方法 |
含义 |
public StringBuffer replace(int start,int end,String str): |
从start开始到end用str替换 |
public StringBuffer reverse() |
字符串反转 |
public class MyTest7 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("大漠孤烟直,长河落日圆");
sb.replace(0,5,"宁为百夫长");
System.out.println(sb);
sb.reverse();
System.out.println(sb);
}
}
2.6 StringBuffer查找字符串功能
项目 |
Value |
int indexOf (String str) |
从头查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1 |
int indexOf (String str,int fromIndex) |
从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1 |
int lastIndexOf (String str) |
从后往前查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1 |
int lastIndexOf (String str,int fromIndex) |
从后往前, 从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1 |
public class MyTest8 {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer("asffghksk");
int i = buffer.indexOf("s");
System.out.println(i);
int i1 = buffer.indexOf("m");
System.out.println(i1);
int i2= buffer.indexOf("f", 3);
System.out.println(i2);
int i3 = buffer.lastIndexOf("ff");
System.out.println(i3);
int i4 = buffer.lastIndexOf("ff", 1);
System.out.println(i4);
}
}
2.7 StringBuffer截取功能
项目 |
Value |
public String substring(int start) |
从指定位置截取到末尾 |
ublic String substring(int start,int end) |
截取从指定位置开始到结束位置,包括开始位置,不包括结束位置 |
注意:返回值类型不再是StringBuffer本身,而是字符串
public class MyTest9 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("科比是一名著名的运动员");
String s = sb.substring(0);
System.out.println(s);
String s1= sb.substring(0, 2);
System.out.println(s1);
}
}
2.8 StringBuffer与String之间的相互转换
ring类型转换为StringBuffer类型的方式 |
1.通过构造方法 |
2.通过append()方法 |
3.通过insert()方法 |
public class MyTest10 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("hello");
StringBuffer sb1 = new StringBuffer();
sb1.append("helloworld");
StringBuffer sb2 = new StringBuffer();
sb2.insert(0,"hellojava");
}
}
StringBuffer类型转换为 String类型 |
1.使用toString()方法进行转换 |
2.使用substring()方法进行转换 |
3.使用构造方法进行转换 |
public class MyTest11 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("helloworld");
String s = sb.toString();
System.out.println(s);
String s1 = sb.substring(0);
System.out.println(s1);
String s2 = new String(sb);
System.out.println(s2);
}
}
2.9 StringBuffer的案例习题
- 1.把数组转成字符串, 需求:把数组中的数据按照指定个格式拼接成一个字符串。 举例:int[] arr = {1,2,3}; 输出结果: "[1, 2, 3]"用StringBuffer的功能实现
public class MyTest12 {
public static void main(String[] args) {
int []arr={1,2,3};
String s="[";
StringBuffer sb = new StringBuffer();
for (int i = 0; i < arr.length; i++) {
if(i==sb.length()-1){
sb.append(s).append(arr[i]).append("]");
}
else{
sb.append(arr[i]);
}
}
System.out.println(Arrays.toString(arr));
}
}
- 2.把字符串反转。举例:键盘录入"abc" ,输出结果:“cba” ,用StringBuffer的功能实现
import java.util.Scanner;
public class MyTest13 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.nextLine();
StringBuffer sb = new StringBuffer(s);
sb.reverse();
System.out.println(sb.toString());
}
}
输出的结果为:
3.StringBuffer和StringBuilder的区别
- StringBuffer:线程安全的长度可变字符容器,线程安全,效率低。
-
StringBuilder:线程不安全的长度可变字符容器,(单线程使用时比StringBuffer的效率更快)线程不安全,效率高。
4. StringBuffer与StringBuilder的传参问题形式参数问题
- 引用数据类型作为参数传递,形参的改变会影响实参
- 基本数据类型作为参数传递,形参的改变不影响实参
- 注意:字符串是常量,在参数传递时属于值传递(字符串虽说是引用数据类型,但它作为参数传递时属于值传递,与基本数据类型传参原则保持一致)
public class MyTest14 {
public static void main(String[] args) {
String str="abc";
test(str);
System.out.println(str);
StringBuilder sb = new StringBuilder("科比是一名篮球运动员");
test(sb);
System.out.println(sb.toString());
}
private static void test(StringBuilder sb) {
sb.append(",他投篮很飘逸");
}
private static void test(String str) {
str+="efg";
System.out.println(str);
}
}
5.StringJoiner的介绍(JDK1.8后)
- StringJoiner是用来构建一个字符序列由一个分隔符分隔,可以从一个提供前缀和结束与提供的后缀。
StringJoiner的构造方法 |
含义 |
StringJoiner(CharSequence delimiter) |
构建了一个字符容器,指定分隔符 |
StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix) |
构建了一个字符容器,指定分隔符,前缀,后缀 |
StringJoiner的其他方法介绍 |
含义 |
StringJoiner add(CharSequence newElement) |
增加了一份给 CharSequence值的 StringJoiner价值的下一个元素 |
int length() |
返回该 StringJoiner的 String表示长度 |
String toString() |
把容器中的数据以字符串返回 |
import java.util.StringJoiner;
public class MyTest15 {
public static void main(String[] args) {
StringJoiner sj = new StringJoiner(",");
sj.add("aaa").add("bbb").add("ccc");
System.out.println(sj.toString());
System.out.println("=============");
StringJoiner sj1 = new StringJoiner(",", "[", "]");
sj1.add("aaa").add("bbb").add("ccc");
System.out.println(sj1);
}
}
案例:把数组中的数据按照指定格式拼接成一个字符串,举例:int []arr={1,2,3};输出结果为:"[1,2,3]",用StringJoiner进行实现
import java.util.StringJoiner;
public class MyTest16 {
public static void main(String[] args) {
int []arr={1,2,3};
StringJoiner stringJoiner = new StringJoiner(",","[","]");
for (int i = 0; i < arr.length; i++) {
stringJoiner.add(arr[i]+"");
}
System.out.println(stringJoiner.toString());
}
}
本文地址:https://blog.csdn.net/qq_41537102/article/details/111826220