一、不变字符串类String
(1)创建字符串
在Java中用String类的构造方法来创建字符串变量,常用构造方法如下。
①使用String()方法创建String 对象:
Strings =new String();
②使用String(char a[ ])方法创建String对象:
char a [ ] = { ' h ' ,' e' ,' r ,' r ,' o ' | ;
String s =new String(a);
上述代码等价于String s =new String("hello")。
③使用String(char a[ ], int offset, int length)方法创建对象:
char a[ ] = { ' s ' ,' t ' ,' u' ,' d ' ,' e' ,' n ' ,' t' } ;
Strings = new String(a,2,4);
上述代码等价于Strings =new String("uden")。offset 表示开始截取字符串的位置, length表示截取长度。所以此例表示从数组a中下标为2 的元素“u”开始截取,截取长度为4,所以截取出的字符串为“uden”。一般情况下也可以直接声明:Strings ="We are students"。
(2)字符串操作
对于已经声明的字符串,可以对其进行相应的操作。
①字符串连接。当连接多个字符串时,在每两个连接的字符串之间用“+”相连,“+”就是字符串的连接符,连接之后生成一个新的字符串。例如:
String s1=new String("hello");
String s2 =new String("world");
String s =s1+""+s2;
这种写法在之前的例子中也出现过很多次,将s1、空格、s2进行连接,运行结果就是“hello world”。
当字符串和其他数据类型连接时,同样使用“+”连接符,连接之后的返回值是字符串。例如:
int year =2023;
int month =1;
int day =24;
float time =2.5f;
System. out. println("今天是" '+year+"年"+month+"月"+day+"日"+"这篇博客大概要写"+time+"个小时");
②获取字符串信息。对一个字符串进行操作,我们首先需要知道它的长度,使用String类的length()方法可以获取声明的字符串对象的长度。例如:
Strings ="We are students";
System. out. println("字符串的长度是:"+s. length( ));
上述代码的运行结果是15,很明显空格也计算在内了,这点需要注意。
我们需要获取的字符串信息除了长度,还有一个就是索引位置。当我们需要一个字符串的某一个字符时,需通过索引位置获取该字符。String 类中提供了indexOf()和lastIndexOf()方法来获取指定字符的索引位置。区别在于,前者返回的是搜索的字符首次出现的位置的索引,后者返回的是搜索的字符最后出现位置的索引。例如:
String str ="We are students";
System. out. println(str. indexOf("s")); //s首次出现的位置索引,结果为7
System. out. println(str. lastIndexOf("s")); //s最后一次出现的位置索引,结果为14
当然,我们还可以获取指定索引位置的字符,使用String类中的charAt()方法,返回字符串中指定索引位置的字符。例如:
String s ="hello world";
char a = s. charAt( 6) ; //a 的值为'w'
二、字符串缓冲区类StringBuffer
StringBuffer又称为可变字符序列,字符串缓冲区支持可变的字符串,StringBuffer是个字符串的缓冲区,即它就是一个容器,容器中可以装很多字符串,并且能够对其中的字符串进行各种操作。
(1)StringBuffer构造方法
StringBuffer()构造一个其中不带字符的字符串缓冲区,其初始容量为16个字符。
(2)StringBuffer类常用方法
append(char[]str)——将char数组参数的字符串表示形式追加到此序列。
capacity()——返回当前容量(返回值为int类型)。
delete(int start, int end)——移除此序列的子字符串中的字符。
indexOf(String str)——返回第一次出现的指定子字符串在该字符串中的索引。
length()——返回此序列长度。
substring(int start, int end)——返回一个新的String 类型,包头不包尾。
常用方法的演示代码:
StringBuffer sb =new StringBuffer();
sb. append("haha");//添加字符串
System. out. println(sb);//haha
sb. insert(2,"it");//在指定下标位置插入
System. out. println(sb);//haitha
sb. delete(1,4);//删除,包头不包尾(不包含4)
System. out. println(sb);//hha
sb. replace(1,4,"cast");//替换指定范围内的内容
System. out. println(sb);//hcast
String str =sb. toString();//返回String类
System. out. println(str);//heast
注意:append、delete、insert、replace、reverse方法调用后,返回值都是当前对象自己,所以说,StringBuffer它可以改变字符序列的长度和内容。
无论多少数据,数据是什么类型都不重要,只要最终变成字符串就可以使用StringBuffer这个容器!
三、String和StringBuffer的区别
执行速度的运行快慢:StringBuffer>String。
String为字符串常量,而StringBuffer为字符串变量,即String 对象一旦创建之后该对象是不可更改的,但StringBuffer的对象是变量,是可以更改的。Java 中对String 对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。而StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。
String适用于少量的字符串操作的情况,StringBuffer适用多线程下在字符缓冲区进行大量操作的情况。