String类:
String代表字符串类,java中所有双引号中的内容都称为字符串,如:“hello”。字符串是不可改变的,因此字符串是可以共享使用的,相当于char字符数组,但是底层原理是byte字节数组。
创建字符串的四种方式:
// 1.创建字符串对象有四中方式,如下:
public class Stringobj{
public static void main(String[] args){
// 1-1:第一种括号中不传参直接创建:new String(),括号留空表示创建的是空白字符。
String str1 =new String();
System.out.println(str1);//""
// 1-2:第二种根据字符数组的内容创建:new String(字符数组变量名),括号中写字符数组变量名,不能直接写字符数组表达式,否则解析错误,如:{'a','b'}。
char[] char1 = {'o','k'};
String str2 = new String(char1);
System.out.println(str2);//ok,ok实际是有双引号的字符串
// 1-3:第三种根据字节数组创建:new String(byte数组变量名),计算机底层都是字节,因此可以直接使用字节创建。
byte[] byte1 = {97,98,99};//a的字节数为97,b的字节数为98,c的字节数为99
String str3 = new String(byte1);
System.out.println(str3);//abc
// 1-4:直接创建:"字符串的内容",如:
String str4 = "hello,my name is kuhai.";
System.out.println(str4);//hello,my name is kuhai.
}
}
字符串的常量池:
字符串中直接使用双引号包裹的字符串就在常量池中,字符串常量池存在于堆当中,常量池中的字符串可以共享。
// 1.常量池:双引号直接包裹着的字符串是在常量池中的。
// 2.==在基本数据类型中是对值的进行比较,在引用型数据类型中时是对地址值的比较。
public class StringPool{
public static void main(String[] args){
String str1 = "123";
String str2 = "123";
char[] chararr = {'1','2','3'};
String str3 = new String(chararr);
System.out.println(str1 == str2);//true,表明str1和str2的地址值相同
System.out.println(str1 == str3);//false,表明str1和str3的地址值不相同
System.out.println(str2 == str3);//false,表明str2和str2的地址值不相同
}
}
String类的常用方法:
public class StringMethods{
public static void main(String[] args){
// 1.字符串内容比较:
// 1-1:==是对对象地址值进行比较的,若要比较两个字符串内容(区分大小写),那么可以使用:equals(Object)方法,参数可以是任何对象,此方法通过.调用,只有调用者和传入的参数相同时,才会返回布尔值true,如:
String str1 = "123";
String str2 = "123";
char[] arr = {'1','2','3'};
String str3 = new String(arr);
String str4 = "kuhai";
Boolean str1and2 = str1.equals(str2);
Boolean str1and3 = str1.equals(str3);
Boolean str2and3 = str2.equals(str3);
Boolean str2and4 = str2.equals(str4);
System.out.println(str1and2);//true
System.out.println(str1and3);//true
System.out.println(str2and3);//true
System.out.println(str2and4);//false
// 提示:equals方法具有对称性,即:str1.equals(str2)和str2.equals(str1)效果是一样的;当常量和变量进行比较时,推荐常量调用equals方法,将变量传入方法中。
// 1-2:equalsIgnoreCase(String),忽略英文字母大小写对内容进行比较,内容相同返回布尔值true,如:
String strabc = "abc";
String strABC = "ABC";
Boolean result1 = strabc.equals(strABC);
Boolean result2 = strabc.equalsIgnoreCase(strABC);
System.out.println(result1);//false
System.out.println(result2);//true
//2.获取字符串字符的个数:length(),如:
System.out.println(str1.length()); //3
// 3.字符串拼接:concat(String),将被调用该方法的字符串和传入的字符串拼接起来且原字符串都不变,只是会生成新的字符串返回,如:
String hw = "hello".concat(" world");
System.out.println(hw);//hello world
// 4.获取字符串指定位置的字符:charAt(int),需要注意:索引从0开始,也就是说,字符串中第一个字符为索引为0,如:
String sayhello = "hello,my name is kuhi!";
char chars = sayhello.charAt(4);
System.out.println(chars);//o
// 5.查找某字符在字符串中第一次出现的位置:indexOf(String),返回索引值,没有则返回-1,如:
String hel = "hello";
int indexhel = hel.indexOf("l");
System.out.println(indexhel);//2
// 6.截取字符串:substring(int),当给一个索引时表示从某索引位置开始截取后面的所有字符串,当传入两个参数时,表示截取[int1,int2)区间的字符,如:
String numstr = "12345";
String substr = numstr.substring(1,3);
System.out.println(substr);//23
// 7.字符串转换为字符数据:toCharArray(),将某字符串转换为字符数组并返回,原来字符串不变,如:
String strtest1 = "abcd";
char[] arrtochararr = strtest1.toCharArray();
System.out.println(arrtochararr[1]);//b,通过索引的方式拿到数组的元素
// 8.字符串转换为字节数组:getBytes(),将某字符串转换为字节数组并返回,原来字符串不变,如:
byte[] bt = "abc".getBytes();
System.out.println(bt[0]);//97,通过索引拿到数组的元素
// 9.字符串替换:replace(oldstr,newstr),将某字符串中旧的字符替换为新的字符并返回,原字符串不变,如:
String says = "你好";
String replacestr = says.replace("你","他");
System.out.println(replacestr);//他好
// 10.字符串分割:split(String),将字符串按照某规则进行分割成几部分,并以数组的形式返回,原字符串不变,如:
String names = "jack,李明,韩梅梅";
String[] namearr = names.split(",");//这里实际是正则表达式,若要以英文句号切割,那么就得传入:\\. ,因为英文句号在正则中有特殊含义。
System.out.println(namearr[1]); //李明
}
}
笔者:苦海