本期知识点:
String类的常用方法
String s2 = "Hello";创建了几个对象?
s1创建了两个对象。
s2创建了一个对象,直接指向常量池中的。
String类的常用方法
类 String
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。
字符串的特点:
a. 字符串一旦被赋值,其值不能再改变。例:
b. 方法区:有一个内存区域:字符串常量池。如果我们创建一个字符串对象,给对象赋值,这个值会在常量池进行寻找,有则返回;没有那么就在常量池开辟空间。
public class StringDemo {
public static void main(String[] args) {
//创建字符串对象
String s = "hello" ;
s += "world" ;
System.out.println("s:"+s);//hellowrld
}
}
(面试题):
String s1 = new String("Hello");创建了几个对象?String s2 = "Hello";创建了几个对象?
s1创建了两个对象。
s2创建了一个对象,直接指向常量池中的。
1. 常用构造方法
a. public String() 无参构造例:
b. public String(byte[] bytes) 将字节数组转换成字符串
c. public String(byte[] bytes,int offset,int length) 将字节数组的一部分转换成字符串
d. public String(char[] value) 将字符数组转换成字符串
e. public String(char[] value,int offset,int count) 将字符数组的一部分转换成字符串
f. public String(String original) 将一个常量转换字符串:String 是不可变的,所以无需使用此构造方法
public class Demo01 {
public static void main(String[] args){
//public String():无参构造
String s = new String();
System.out.println(s);//空字符序列
System.out.println(s.length());//0;
System.out.println("--------------------");
//public String(byte[] bytes):将字节数组转换成字符串
//构造一个字节数组,静态初始化;
byte[] a = {97,98,99,100,101};
String s2 = new String(a);
System.out.println(s2);//abcde;
System.out.println(s2.length());//5;
System.out.println("--------------------");
//public String(byte[] bytes,int offset,int length):将字节数组的一部分转换成字符串
String s3 = new String(a,0,3);
System.out.println(s3);//abc;
System.out.println(s3.length());//3
System.out.println("--------------------");
//public String(char[] value):将字符数组转换成字符串
char[] b = {'L','I','N','K','I','N',' ','P','A','R','K'};
String s4 = new String(b);
System.out.println(s4);//LINKIN PARK
System.out.println(s4.length());//11
System.out.println("--------------------");
//public String(char[] value,int offset,int count):将字符数组的一部分转换成字符串
String s5 = new String(b,5,6);
System.out.println(s5);//N PARK
System.out.println(s5.length());//6
System.out.println("--------------------");
//public String(String original):将一个常量转换字符串:String 是不可变的,所以无需使用此构造方法
String s6 = new String("LinKin Park");
System.out.println(s6);
System.out.println(s6.length());
}
}
2. 常用的判断功能
a.boolean equals(Object obj) 将此字符串与指定的对象比较 。
b. boolean equalsIgnoreCase(String str) 将此字符串和另一个字符串进行比较,忽略大小写。
c. boolean contains(String str) 判断此字符串中是否包含str这个子字符串。
d. boolean startsWith(String str) 判断是否以str子字符串开头。
e. boolean endsWith(String str) 判断是否已str字符串结尾。
f. boolean isEmpty() 判断字符串是否为空。
例:注意:String s = ''''; //表示s字符串是空字符串String s = null;//空对象,连对象都没有.当字符串为null时,会出现NullPointerException:空指针异常,需要加入非空判断。
public class String类的判断功能 {
public static void main(String[] args) {
//定义三个字符串;
String a = "linkinPark";
String b = "linkinPark";
String c = "LinKinPark";
//boolean equals(Object obj):将此字符串与指定的对象比较 。
System.out.println(a.equals(b));//true
System.out.println(a.equals(c));//false
System.out.println("—————————");
//boolean equalsIgnoreCase(String str):将此字符串和另一个字符串进行比较,忽略大小写。
System.out.println(a.equalsIgnoreCase(b));//true
System.out.println(a.equalsIgnoreCase(c));//true
System.out.println("—————————");
//boolean contains(String str):判断此字符串中是否包含str这个子字符串。
System.out.println(a.contains("Park"));//true
System.out.println(a.contains("Lin"));//false
System.out.println("—————————");
//boolean startsWith(String str):判断是否以str子字符串开头。
System.out.println(a.startsWith("lin"));//true
System.out.println(a.startsWith("Lin"));//false
System.out.println("—————————");
//boolean endsWith(String str):判断是否已str字符串结尾。
System.out.println(a.endsWith("Park"));//true
System.out.println(a.endsWith("park"));//false
System.out.println("—————————");
//boolean isEmpty():判断字符串是否为空。
String e = " ";
System.out.println(e.isEmpty());//false
String f = null;//java.lang.NullPointerException
//加入非空判断
if(f!=null){
System.out.println(f.isEmpty());
}
}
}
3. 常用的字符串转换功能
a. byte[] getBytes() 将一个字符串转换字节数组。b. char[] toCharArray() 将一个字符串转换成字符数组。★c. static String valueOf(char[] chs) 将字符数组转换成字符串。d. static String valueOf(int i) 将int类型的数据转换字符串。
注意:String类中的valueOf方法可以将任何数据类型转换成String。
例:e. String toLowerCase() 将字符串转换成小写。f. String toUpperCase() 将字符串转换成大写。g. String concat(String str) 字符串拼接功能。
public class String类的转换功能 {
public static void main(String[] args) {
//定义一个字符串
String a = "LinKinPark";
//byte[] getBytes():将一个字符串转换字节数组。
byte[] s1 = a.getBytes();
for (int i = 0; i < s1.length; i++) {
System.out.print(s1[i]+" ");//76 105 110 75 105 110 80 97 114 107
}
System.out.println();
System.out.println("—————————");
//char[] toCharArray():(重点方法):将一个字符串转换成字符数组。(重点)
char [] s2 = a.toCharArray();
for (int i = 0; i < s2.length; i++) {
System.out.print(s2[i]+" ");//L i n K i n P a r k
}
System.out.println();
System.out.println("—————————");
// static String valueOf(char[] chs):将字符数组转换成字符串。
String b = String.valueOf(s2);
System.out.println(b);//LinKinPark
System.out.println("—————————");
// tatic String valueOf(int i):将int类型的数据转换字符串。
//注意:String类中的valueOf方法可以将任何数据类型转换成String。
int x = 101;
String c = String.valueOf(x);
System.out.println(c);//101
System.out.println("—————————");
// String toLowerCase():将字符串转换成小写。
// String toUpperCase():将字符串转换成大写。
System.out.println("小写:"+a.toLowerCase());//小写:linkinpark
System.out.println("大写:"+a.toUpperCase());//大写:LINKINPARK
System.out.println("—————————");
//String concat(String str):字符串拼接功能。
String d = "Imagine";
String e = "Dragons";
String f = d.concat(e);
System.out.println(f);//ImagineDragons
}
}
4. 常用的获取功能
a. int length() 获取字符串的长度。
b. char charAt(int index) 返回指定索引处的字符★
c. int indexOf(int ch) 返回回指定字符在此字符串中第一次出现处的索引★
注意:为什么这里的参数是int类型,而不是char类型
'a'和97 都代表'a'
d. int indexOf(String str) 返回指定字符串在此字符串第一次出现的索引例:
e. int indexOf(int ch,int fromIndex) 返回此字符中从指定位置开始后第一次出现的索引
f. int indexOf(String str,int fromIndex) 返回此字符串中从指定位置开始后第一次出现的索引★
g. String substring(int beginIndex) 截取:从指定位置开始截取,默认截取到末尾:包含start这个索引
h. String substring(int beginIndex,int endIndex) 从指定位置开始截取到指定位置结束:包左(start这个索引),不包含end这个位置.
public class String类的获取功能 {
public static void main(String[] args) {
//定义一个字符串
String a = "LinkPark";
//int length():获取字符串的长度。
System.out.println(a.length());//8
System.out.println("—————————");
//char charAt(int index):返回指定索引处的字符!(重点)★
System.out.println(a.charAt(5));//a
System.out.println("—————————");
//int indexOf(int ch):返回回指定字符在此字符串中第一次出现处的索引(重点)★
//注意:为什么这里的参数是int类型,而不是char类型
// 'a'和97 都代表'a'
System.out.println(a.indexOf('P'));//4
System.out.println(a.indexOf('k'));//3
System.out.println("—————————");
// int indexOf(String str):返回指定字符串在此字符串第一次出现的索引!
System.out.println(a.indexOf("in"));//1
System.out.println(a.indexOf("ar"));//5
System.out.println("—————————");
//int indexOf(int ch,int fromIndex):返回此字符中从指定位置开始后第一次出现的索引
System.out.println(a.indexOf('k', 5));//7
System.out.println("—————————");
//int indexOf(String str,int fromIndex):返回此字符串中从指定位置开始后第一次出现的索引★
System.out.println(a.indexOf("ar", 4));//5
System.out.println("—————————");
// String substring(int beginIndex):截取:从指定位置开始截取,默认截取到末尾:包含start这个索引
System.out.println(a.substring(4));//Park
System.out.println("—————————");
// String substring(int beginIndex,int endIndex):从指定位置开始截取到指定位置结束:包左(start这个索引),不包含end这个位置.
System.out.println(a.substring(2, 6));//nkPa
}
}
5. String类其他功能
a. 替换功能:
String replace(char old,char new):将老的字符替换成一个新的字符。String replace(String old,String new) :替换字符串。
b. 去除字符串两空格:
String trim()
c. 按字典的顺序比较两个字符串。
例:String comparaTo(String str)
public class String类的其他功能_替换和去除空格 {
public static void main(String[] args) {
//定义一个字符串
String a = "LinkinPark";
//String replace(char old,char new):将老的字符替换成一个新的字符。
String b = a.replace('k', 'W');
System.out.println(b);//LinWinParW
System.out.println("—————————");
//String replace(String old,String new):替换字符串。
String c = a.replaceAll("Linkin", "NewYork");
System.out.println(c);//NewYorkPark
System.out.println("—————————");
//去除字符串两空格:String trim()
String d = " -LinkinPark- ";
System.out.println(d);// -LinkinPark-
d=d.trim();
System.out.println(d);//-LinkinPark-
}
}
public class String类的其他功能_按字典顺序 {
public static void main(String[] args) {
//定义字符串
String a = "HelloWorld";
String b = "HelloWorld";
String c = "abc";
System.out.println(a.compareTo(b));//0
System.out.println(a.compareTo(c));//-25
System.out.println("—————————");
String d = "Hello";
String e = "Hel";
System.out.println(d.compareTo(e));//2
/* 源码
public int compareTo(String anotherString) {
int len1 = value.length;//this.value.length-->d.toCharArray().length = 5;
int len2 = anotherString.value.length;//this.value.length-->e.toCharArray().length = 3;
int lim = Math.min(len1, len2);// min = 3;
char v1[] = value; //d字符串转换成字符数组:['H','e','l','l','o'];
char v2[] = anotherString.value; //e字符串转换成字符数组:['H','e','l'];
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}*/
}
}