目录
5.5.3 StringBuffer、StringBuilder、String之间的关系
5.1 String类
5.1.1 声明字符串
字符串是常量,它们可以显示任何文字信息,字符串的值在创建之后不能更改。在Java语言中,单引号中的内容表示字符,例如's',而双引号中的内容则表示字符串,例如:
"我是字符串”,"123456789" ," 上下左右东西南北”
Java通过java lang String这个类来创建可以保存字符串的变量,所以字符串变量是一个对象。声明一个字符串变量a,以及声明两个字符串变量a、b。代码如下:
String a;
String a,b;
注意:在不给字符串变量赋值的情况下,默认值为null,就是空对象,如果此时调用String的方法会发生空指针异常。
5.1.2 创建字符串
1.引用字符串常量
例如,直接将字符串常量赋值给String类型变量。代码如下: String a = "时间就是金钱,我的朋友。"; String b = "锄禾日当午",c = "小鸡炖蘑菇"; String str1, str2; str1=. "We are students"; srt2 = "We are students";
当两个字符串对象引用相同的常量时,就具有相同的实体,内存示意图如图所示。
2.利用构造方法实例化
例如,使用new关键字创建String对象。代码如下:
String a = new String("我爱清汤小肥羊"); String b = new String(a) ;
3.利用字符数组实例化
例如,定义一个字符数组charArray,使用该字符数组创建一个字符串。 代码如下: char[ ] charArray = { 't', 'i', 'm', 'e' }; String a = new String (charArray) ;
4.提取字符数组中的一部分创建字符串对象
例如,定义一个字符数组charArray从该字符数组索引3的位置开始,提取两个元素,创建一个字符串。代码如下: char[ ] charArray = { '时,间,'就', '是,'金','钱,}; String a = new String (charArray, 3,2);
public class CreateString {//创建类
public static void main(String[] args) {//主方法
String a="时间就是金钱,我的朋友。";//直接引用字符串常量
System.out.println("a="+a);//输出"a = " + a
String b=new String("我爱清汤小肥羊");//利用构造方法实例化
String c=new String(b);//使用已有字符串变量实例化
System.out.println("b ="+b); //输出"b = " + b
System.out.println("c ="+c);//输出"c = " + c
char[] charArray = { 't', 'i', 'm', 'e' };//创建char类型的一维数组
String d=new String(charArray);//利用字符数组实例化
System.out.println("d="+d);//输出"d = " + d
char[] charArray2 ={ '时','间','就','是','金','钱'};//提取字数组部分内容,从下标为4的元素开始,截取2个字符
String e=new String(charArray2,4,2); //替换数组元素
System.out.println("e="+e);//输出e=金钱
}
}
5.2 连接字符串
对于以声明的字符串,可以对其进行相应的操作连接,字符串就是字符操作中较简单的一种,可以对多个字符串进行连接,也可使字符串与其他数据类型进行连接。
5.2.1 连接字符串
使用“+”运算符可实现拼接多个字符串的功能,“+”运算符可以连接多个字符串并产生一个String对象。除了“+” 运算符,“+=”同样可以实现字符串拼接。
public class StringConcatenation {//创建类
public static void main(String[] args) {//主方法
String a ="abc"; //创建string类型的a并且赋值为abc
String b="123";//创建string类型的b并且赋值为123
String c=a + b +"!" ;//使用“+”拼接字符串
String d ="拼接字符串";//创建string类型的d并且赋值为拼接字符串
d += c; // 使用“+=”拼接字符串
System.out.println("a ="+a);//输出"a = " + a
System.out.println("b="+b);//输出"b = " + b
System.out.println("c="+c); //输出"c = " + c
System.out.println("d="+d);//输出"d = " + d
}
}
5.2.2 连接其他数据类型
字符串也可同其他基本数据类型进行连接。如果将字符串同这些数据类型进行连接,会将这些数据直接转换成字符串。
public class Link {//创建类
public static void main(String[] args) {//主方法
int booktime=4;//声明的int型变量booktime
float practice = 2.5f; // 声明的float型变量practice
//将字符串与整型、浮点型变量相连,并将结果输出
System.out.println("我每天花费"+booktime+"小时看书;"+practice+"小时上机练习");//输出我每天花费" + booktime + "小时看书; " + practice + "小时上机练习
}
}
注意:只要“+”运算符的一个操作数是字符串,编译器就会将另一个操作数转换成字符串形式,所以应谨慎地将其他数据类型与字符串相连,以免出现意想不到的结果。
5.3 提取字符串信息
字符串作为对象可以通过相应的方法获取字符串的有效信息如何取的各索引位置的字符等。
5.3.1 获取字符串长度
length()方法返回采用UTF-16的编码表示字符的数量,也就是char的数量。
str.length ();
长度 字符串名.length();
String a = “建团一百周年”
Int b = a. length();
注意: 字符串的length( )方法与数组的length虽然都是用来获取长度的,但两者却有些不同。String 的length( )是类的成员方法,是有括号的;数组的length是一个属性,是没有括号的。
5.3.2 获取指定字符串
charAt(String index)方法可将指定索引处的字符返回。
str. charAt (index);
str: 任意字符串对象。
index: char值的索引。
public class ChatAtTest {//创建类
public static void main(String[] args) {//主方法
String str ="床前明月光,疑是地上霜。";// 创建字符串对象str
char chr = str.charAt(4); //将字串str中索引位置为4的字符赋值给ch
System.out.println("字符串中索引位置为4的字符是:"+chr);//输出chr
}
}
5.3.3 获取子字符串索引位置
String类提供了两种查找字符串的方法,即indexOfO与lastIndexOfO方法。indexOf0方法返回的是搜索的字符或字符串首次出现的位置,lastIndexOfO方法返回的是搜索的字符或字符串最后一次出现的位置。
1.indexOf(String str)
indexOf(substr);
a:任意字符串对象。
substr:要搜索的字符串。
public class StringIndexOf {//创建类
public static void main(String[] args) {//主方法
String str ="12345abcde";//创建字符串对象
int charIndex=str.indexOf("abc");//获取字符串str中“abc”首次出现的索引,赋值给charIndex
if(charIndex!=-1) {//判断:index的值不等于-1
//如果index不等于-1,则执行此行代码,说明str中存在“abc”字符串
System.out.println("str中存在abc字符串");//输出str中存在abc字符串
}else {//如果index等于-1,则执行此行代码,说明str中没有“abc”字符串
System.out.println("str中没有abc字符串");//输出str中没有abc字符串
}
}
}
2.indexOf(String srt,int fromindex)
a.indexOf(str,fromIndex);
a:任意字符串对象
str:要搜索的子字符串
fromindex:开始搜索的索引位置
public class StringIndexOf2 {//创建类
public static void main(String[] args) {//主方法
// 创建字符串
String str = "We are the world";
// 获取字符串中"r"第一次出现的索引位置
int firstIndex = str.indexOf("r");
// 获取字符串中"r"第二次出现的索引位置,从第一次出现的索引位置之后开始查找
int secondIndex = str.indexOf("r", firstIndex + 1);
// 获取字符串中"r"第三次出现的索引位置,从第二次出现的索引位置之后开始查找
int thirdIndex = str.indexOf("r", secondIndex + 1);
// 输出三次获取的索引位置
System.out.println("e第一次出現的索引位置是:" + firstIndex);//输出e第一次出現的索引位置是:" + firstIndex
System.out.println("e第二次出現的索引位置是:" + secondIndex);//输出e第二次出現的索引位置是:" + secondIndex
System.out.println("e第三次出現的索引位置是:" + thirdIndex);//输出e第三次出現的索引位置是:" + thirdIndex
}
}
3.pubile int lastindexOf(String srt)
a.last IndexOf(str);
a:任意字符串
srt:要搜索的字符串
public class StringLastIndexOf {//创建类
public static void main(String[] args) {//主方法
String str = "Let it go!Let it go!"; // 创建字符串对象
int gIndex = str.lastIndexOf("g"); // 返回”g“最后一次出现的位置
int goIndex = str.lastIndexOf("go"); // 返回”go“最后一次出现的位置
int oIndex = str.lastIndexOf("o"); // 返回”o“最后一次出现的位置
System.out.println("字符串\"Let it go!Let it go\"中:\n");//输出字符串
System.out.println("\"g\"最后一次出现的位置是:" + gIndex);//输出”g“最后一次出现的位置
System.out.println("\"o\"最后一次出现的位置是:" + oIndex); //输出”o“最后一次出现的位置
System.out.println("\"go\"最后一次出现的位置是:" + goIndex);//输出”go“最后一次出现的位置
}
}
4.lastindexOf(String srt,int fromindex)
a.lastIndexOf(str,int fromindex);
a:任意字符串
srt:要搜索的子字符串
fromindex:开始搜索的索引位置
public class StringLastIndexOf2 {//创建类
public static void main(String[] args) {//主方法
String str = "01a3a56a89";//定义String
// 返回字母"a"最后一次出现的索引位置
int lastIndex = str.lastIndexOf("a");// 返回字母"a"的索引位置otherIndex
// 满足0<=fiveBeforeIndex<=5条件,在满足条件的结果集中,返回最大的数字
int fiveBeforeIndex = str.lastIndexOf("a", 5);// 返回字母"a"的索引位置otherIndex
int threeBeforeIndex = str.lastIndexOf("a", 3);// 满足0<=threeBeforeIndex<=3条件,在满足条件的结果集中,返回最大的数字
System.out.println("字符串\"01a3a56a89\"中:\n");//输出字符串
System.out.println("字母\"a\"最后一次出现的位置是:" + lastIndex);//输出a最后一次出现的位置
System.out.println("从索引位置5开始往回搜索,字母\"a\"最后一次出现的位置:" + fiveBeforeIndex);//输出索引位置5开始往回搜索“a”最后一次出现的位置
System.out.println("从索引位置3开始往回搜索,字母\"a\"最后一次出现的位置:" + threeBeforeIndex);//输出索引位置3开始往回搜索“a”最后一次出现的位置
}
}
5.3.4 判断字符串首尾内容
1.starsWith(String prefix)
str.startsWith(prefix);
srt:任意字符串
prefix:作为前缀的字符串
public class StringStartWith {//创建类
public static void main(String[] args) {//主方法
String myDream1 = "我有一个梦想,幽谷上升,高山下降;";// 前半句
String myDream2 = "坎坷曲折之路成坦途,圣光披露,满照人间。";// 后半句
System.out.println(myDream1 + myDream2 + "\n\t\t————马丁•路德金《我有一个梦想》\n");// 打印整句话
boolean firstBool = myDream1.startsWith("我有一个梦想");// 判断前半句是否以"我有一个梦想"为前缀
boolean secondBool = myDream2.startsWith("我有一个梦想");// 判断后半句是否以"我有一个梦想"为前缀
if (firstBool) {// 判断前半句的逻辑结果
System.out.println("前半句是以\"我有一个梦想\"开始的。");//输出前半句是以\"我有一个梦想\"开始的
} else if (secondBool) {// 判断后半句的逻辑结果
System.out.println("后半句是以\"我有一个梦想\"开始的。");//输出后半句是以\"我有一个梦想\"开始的
} else {// 如果没有符合条件的字符串
System.out.println("没有以\"我有一个梦想\"开始的。");//输出最后逻辑结果
}
}
}
2.starsWith(String prefix,int toffset)
str.startsWith(perfix,index);
srt:任意字符串
prefix:作为前缀的字符串
index:开始查询位置
public class StringStartWith2 {//创建类
public static void main(String[] args) {//主方法
String str = "床前明月光,疑是地上霜。\n举头望明月,低头思故乡。";// 创建字符串对象
System.out.println(" 《静夜思》\n" + str + "\n");// 打印古诗
int enterIndex = str.indexOf("\n");// 返回换行符所在的位置
// 返回从换行符之后开始的子字符串前缀是否为”举“。
boolean flag = str.startsWith("举", enterIndex + 1);// 换行符在字符串中只占一个字符,所以enterInd