String类详解
1-1 字符串创建方式
作为一名程序员,在开发中,字符串对我们来说,尤为重要,首先说一下,怎样创建一个字符串,字符创建大概由以下几种方式:
1、利用常量初始化一个字符串
//1.利用常量直接初始化
String str = "hello";
2、通过new一个字符串对象
//2.空字符串
String str1 = new String();
//2.利用已存在的字符串
String str2 = new String("hello1");
3、通过一个char数组(字符数组)创建字符串
//3.利用一个字符数组创建一个字符串
char[] charArray = new char[]{'a','b','c'};
String str3 = new String(charArray);//构造方法传入参数char数组
System.out.println(str3);//控制台打印:abc 注:猜想该构造方法实现:遍历char数组,依次拿到‘a’ ‘b’ ‘c’,再去拼接得到abc
4、截取一个字符数组创建一个非空字符串
//4.截取字符数组创建一个非空字符串
char[] charArray1 = new char[]{'h','e','l','l','o','w','o','r','l','d'};//字符数组
String str4 = new String(charArray1, 5, 5);//构造方法依次传入参数 第一个参数:char数组 第二个:起始的索引 第三个:长度
System.out.println(str4);//控制台输出:world
5、
利用StringBuffer对象创建字符串
//5.利用StringBuffer对象创建字符串
StringBuffer strBuff = new StringBuffer("hello");
String str5 = new String(strBuff);//构造方法传入strBuff
System.out.println(str5);//控制台打印:hello
小结:字符串的创建方式就列举这么多,其实就是构造方法的重载,传入参数的不同,让创建字符串的方式多元化
2-1 字符串常用方法
1、获取字符串的长度
//1.获取字符串制度长度
String str6 = "hello";
int lenght = str6.length();
System.out.println(lenght);//控制台输出:5
2、比较字符串是否相等
//2.比较字符串是否相等
String str7 = "hello";
String str8 = "hello";
System.out.println(str7.equals(str8));//控制台输出:true
3、indexOf(参数) 在字符串检索参数,并返回第一次出现的位置
//3.indexOf(args) 从字符串开始检索args,并返回第一次出现的位置
String str8 = new String("facdefg");
System.out.println(str8.indexOf("c"));//控制台输出:2
4、
lastIndexOf 查找最后一次出现的位置
//4.lastIndexOf 查找最后一次出现的位置
String str9 = new String("qtttwerty");
System.out.println(str9.lastIndexOf('t'));//控制台输出:7
5、由
indexOf与lastIndexOf判断邮箱号码是否只含有一个@
//需求:判断一个邮箱中只出现了一次@
String str10 = new String("623247505@qq.com");
if(str10.indexOf('@')==str10.lastIndexOf('@'))
{
System.out.println(str10+"邮箱合格");
}
else{
System.out.println(str10+"邮箱不合格,@只能允许出现一次");
}
6、将字符串转成
字符数组toCharArray()
//将字符串转成字符数组
String str11 = "abcdefg";
char[] charArray3 = str11.toCharArray();//转成了字符数组[a,b,c,d,e,f,g]
7、
将字符串转成字符串数组split()
//将字符串转成字符串数组
String str11 = "abcdefg";
String[] strArray = str11.split("c");//转成了字符串数组[ab,defg]
8、valueOf()将其他数据类型转成字符串型 调用方式:String类点语法直接调用,类名.
valueOf()-->String.valueOf()
//将一些数据类型转成字符串类型
String string1 = String.valueOf(10); //转成了字符串:10
String string2 = String.valueOf(true);//转成了字符串:true
String string3 = String.valueOf('a');//转成了字符串:a
String string4 = String.valueOf(20.1f);//转成了字符串:20.1
9、去掉字符串首尾空格
//去除字符串首尾空格
String Str13 = " adef r ";
String Str14 = Str13.trim();
System.out.println(Str14);//控制输出adef r
10、判断是否以指定的字符串开头或者结尾
String testStr = "asdf";
System.out.println(testStr.startsWith("a"));//是否以字符串a开头,返回boolean类型 控制台打印:true
System.out.println(testStr.endsWith("f"));//是否以字符串f结尾,返回boolean类型 控制台打印:true
11、求字符串某一位置字符charAt()
String testStr = "asdf";
System.out.println(testStr.charAt(2));//返回值为char类型 控制台打印:d
1
2、用String类的substring方法可以提取字符串中的子串,该方法有两种常用参数:
String testStr = "asdferrrw";
System.out.println(testStr.substring(1));//从索引为1开始,截取剩下字符串 控制台打印:sdferrrw
System.out.println(testStr.substring(1,3));//从索引为1开始,截取至所有为3剩下字符串 前包后不包 控制台打印:sd
13、字符串大小写转换
String testStr1 = "aBcDeFg";
System.out.println(testStr1.toUpperCase());//全部转换成大写 控制台打印:ABCDEFG
System.out.println(testStr1.toLowerCase());//全部转换成小写 控制台打印:abcdefg
2-2 拓展之equals()方法
大家都知道String类与StringBuffer类都能调用equals方法,那么请看下面代码,控制台会打印什么呢?
String testStr1 = "123";
String testStr2 = testStr1;
String testStr3 = "123";
System.out.println(testStr1.equals(testStr2));//ture
System.out.println(testStr1.equals(testStr3));//true
StringBuffer strBuff1 = new StringBuffer("123");
StringBuffer strBuff2 = strBuff1;
StringBuffer strBuff3 = new StringBuffer("123");
System.out.println(strBuff1.equals(strBuff2));//true
System.out.println(strBuff1.equals(strBuff3));//false
相信有人会觉得应该全是true,但是运行起来发现结果为true true true false,为什么会这样呢?因为大家都知道String类与StringBuffer类都有着共同的父类Object类,Object类里面有着equals()方法,String类继承了Object,并且它将equals()方法重写了,写成了只比较字符串的内容,不比较字符串的地址。而StringBuffer类继承自Object类,但是它没有重写equals()方法,既比较两个字符串的内容也比较地址。所以上述代码打印的内容就很好理解了。如下图