String:字符串,不可变字符序列
1.String类的实例化方式
(1)直接赋值方式 ,如String str=“李四”;
(2)new对象方式,如String str=new String(“李四”);
public class test9 {
public static void main(String[] args) {
String name1="张三";//方式一
String name2=new String("李四");//方式二
System.out.println("name1="+name1);
System.out.println("name2="+name2);
}
}
运行结果
两种实例化方式的区别:
直接赋值方式,创建的对象存放到字符串对象池里,假如存在的,就不会再创建
new对象方式,每次都创建一个新的对象
举个例子说明
public class test10 {
public static void main(String[] args) {
String name1="张三";
String name2="张三";
String name3=new String("张三");
String name4=new String("张三");
}
}
给出内存图:
2."=="与equals() 比较
“==” 比较的是引用(是否指向同一个内存块)
equals() 比较的是具体内容
public class test11 {
public static void main(String[] args) {
String name1="张三";// 直接赋值方式
String name2=new String("张三");// new方式
String name3=name2;// 传递引用
//==比较的是引用
System.out.println("name1==name2:"+(name1==name2));
System.out.println("name1==name3:"+(name1==name3));
System.out.println("name2==name3:"+(name2==name3));
System.out.println("##############################################");
//equals()比较的是具体的值
System.out.println("name1.equals(name2):"+(name1.equals(name2)));
System.out.println("name1.equals(name3):"+(name1.equals(name3)));
System.out.println("name2.equals(name3):"+(name2.equals(name3)));
}
}
运行结果
给出内存图
3.字符串的内容不可变性
不能改变字符串的内容;要想改变,只能通过指向一个新的内存地址
public class test12 {
public static void main(String[] args) {
String name="张";
name=name+"三";
System.out.println(name);
}
}
这里修改了name,本质是name指向了一个新的内存区域,我们给下内存示意图
4.String类常用的方法
String类中的方法可查询API文档
API文档1.6版下载链接:
https://pan.baidu.com/share/link?shareid=436255&uk=2619580351
下面简单介绍几个常用的方法
(1)chartAt(int index)
返回指定索引处的char值
public class test13 {
public static void main(String[] args) {
String str="开心每一天";
char c=str.charAt(2);//索引从0开始,2指的是第三个字符
System.out.println(c);
System.out.println("##############################");
//遍历输出每个字符
for (int i = 0; i < str.length(); i++) {
char a=str.charAt(i);
System.out.print(a+" ");
}
}
}
运行结果
(2)length()
返回字符串的长度,上面已经演示了
(3)indexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引
public class test14 {
public static void main(String[] args) {
String str="abcdefabcdef";
System.out.println("d在字符串str中第一次出现的索引位置:"+str.indexOf('d'));
System.out.println("d在字符串str中第一次出现的索引位置,从索引位置4开始:"+str.indexOf('d',4));
}
}
运行结果
(4)substring(int beginIndex)
返回一个新的子字符串
public class test15 {
public static void main(String[] args) {
String str="不开心每一天";
String str1="开心每一天,不可能";
System.out.println(str.substring(1));
System.out.println(str1.substring(0,5));
}
}
运行结果
(5)toUpperCase() 和toLowerCase()
将所有字符都转换为大写(小写)
public class test16 {
public static void main(String[] args) {
String str="abcDEF";
System.out.println(str.toUpperCase());// 转成大写
System.out.println(str.toLowerCase());// 转成小写
}
}
运行结果
(6)trim()
去掉收尾空格(中间的不能去掉)
public class test17 {
public static void main(String[] args) {
String str=" abc def ";
System.out.println(str);
System.out.println(str.trim());
}
}
运行结果
(7)split()
切割字符串,返回一个字符串数组
split(" “):以单个空格切割
split(”\s+"):以一个或多个空格切割
split("|"):以|切割
public class test19 {
public static void main(String[] args) {
String str="I like china";
String str1[]=str.split(" ");//以空格方式切割
//遍历str1数组
for (String string : str1) {
System.out.println(string);
}
}
}
运行结果
6.String综合实例
指定字符串“ aB232 23 &*( s2 ”,要求去掉前后空格,然后分别统计其中英文字符,空格,数字和其他字符的个数
public class test20 {
public static void main(String[] args) {
String s=" aB232 23 &*( s2 ";
String str=s.trim();
int yingwen=0;//字母个数
int shuzi=0;//数字个数
int kongge=0;//空格个数
int qita=0;//其它字符个数
for (int i = 0; i <str.length(); i++) {
char c=str.charAt(i);
// 判断英文字符
if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) {
yingwen++;
System.out.println("英文字符"+c);
}else if(c>='0'&&c<='9') {
shuzi++;
System.out.println("数字字符"+c);
}else if(c==' ') {
kongge++;
System.out.println("空格字符"+c);
}else {
qita++;
System.out.println("其它字符"+c);
}
}
System.out.println("英文字符个数:"+yingwen);
System.out.println("数字字符个数:"+shuzi);
System.out.println("空格字符个数:"+kongge);
System.out.println("其它字符个数:"+qita);
}
}
运行结果
字符串反转
public class test21 {
public static void main(String[] args) {
String str="abcde";
String str1="";
for (int i = str.length()-1; i>=0; i--) {
str1+=str.charAt(i);
}
System.out.println(str1);
}
}