2.String类(重重之重)
2.1基本概念
java.lang.String类用于描述字符串,可以表示Java程序中的所有字符串字面值,如:“abc”
该类由final关键字修饰,表示不能被继承。
该类描述的字符串内容是个常量,创建后内容不可以改变,因此可以被共享。
如:
String s1="abc";
s1 = "123"; //- 表示改变变量s1的指向而不是指向的内容
2.2 常量值
由于字符串字面值的内容不可以发生改变,因此Java虚拟机会将出现的字符串字面值放入常量池,若下次出现相同的字符串字面值则直接使用池中已有的元素即可,从而提高程序的执行效率,节省了内存空间。
2.3常用的方法(练熟、记住)
-
常用的构造方法
String() 使用无参的方式创建空字符串对象,如:“”和null不一样的。 String(byte[] bytes, int offset, int length) 使用数组bytes中从下标offset位置开始的length个字节来构造对象。 String(byte[] bytes) 使用参数指定bytes数组中的所有内容构造字符串对象。 String(char[] value, int offset, int count) 使用数组value中从下标offset位置开始的count个字符来构造对象。 String(char[] value) 使用参数指定value数组中的所有内容构造字符串对象。 String(String original) 根据参数指定的字符串来构造对象。 笔试题:请问String s1=“”和String s2=null,有区别吗?
解析:有区别,s1指向明确字符串对象,只是里面没有内容而已;s2没有指向的字符串对象。
package cn.itxdl.day12;
public class TestStringConstructor {
public static void main(String[] args) {
// 1.使用String类的无参构造方法构造对象
String s1 = new String();
System.out.println("s1 = "+s1);
System.out.println("-------------");
//2.使用byte数组来构造字符串对象
byte[] bArr = {66,67,68,69,70};
String s2 = new String(bArr,1,3);
System.out.println("s2 = "+s2);
String s3 = new String(bArr);
System.out.println("s3 = "+s3);
char[] cArr = {'h','e','l','l','o'};
String s4 = new String(cArr);
System.out.println("s4 = "+s4);
String s5 = new String(cArr,2,3);
System.out.println("s5 = "+s5);
}
}
-
常用的成员方法
该类重写了equals(),hashCode(),toString()方法
char charAt(int index) | 根据参数指定的下标返回对应的单个字符。 |
---|---|
int length() | 用于返回当前字符串的长度。 |
int compareTo(String anotherString) | 用于比较调用对象和参数对象的大小关系。 |
使用调用对象和参数对象中第一个字符起依次做减法运算。 | |
第一个字符能确定大小,则后续字符不用比较。 | |
若第一个字符不能确定大小,则使用下一个对应位置的字符比较大小。到其中一个字符串的所有字符比较完毕后也没有确定大小,则由长度来决定大小。 | |
若当前字符串大则返回正数;若当前字符串小则返回负数;若相等则返回零; | |
int compareToIgnoreCase(String str) | 不考虑大小写,也就是’a’和’A’是相等的关系。 |
boolean contains(CharSequence s) | 用于判断当前字符串是否包含参数指定的内容。 |
其中参数是接口类型,因此实参需要传递实现类的对象,而String类就实现了该接口 | |
boolean endsWith(String suffix) | 判断当前字符串是否以参数指定的内容为结尾。 |
boolean startsWith(String prefix) | 判断当前字符串中是否以参数指定的内容为开头。 |
String toLowerCase() | 用于将当前字符串中所有字符转换为小写。 |
String toUpperCase() | 用于将当前字符串中所有字符转换为大写。 |
String trim() | 用于去除当前字符串中两端的空白字符。 |
package cn.itxdl.day12;
public class TestStringChar {
public static void main(String[] args) {
String s1 = new String("helloworld");
System.out.println(s1.charAt(1)+" "+s1.length());
}
}
boolean equals(Object anObject) | 用于比较字符串内容是否相等并返回; |
---|---|
boolean equalsIgnoreCase(String anotherString) | 用于比较字符串内容是否相等并返回,不考虑大小写,如:'A’和’a’是相等。 |
byte[] getBytes() | 用于将当前字符串内容转换为byte数组并返回。 |
char[] toCharArray() | 用于将当前字符串内容转换为char数组并返回。 |
int indexOf(int ch) | 用于返回当前字符串中参数ch指定的字符第一次出现的下标。 |
int indexOf(int ch, int fromIndex) | 用于从fromIndex位置开始查找ch指定的字符。 |
上述方法若查找失败,则返回-1. | |
int indexOf(String str) | 用于查找参数str指定的字符串并返回下标。 |
int indexOf(String str, int fromIndex) | 用于从fromIndex位置开始查找。 |
int lastIndexOf(int ch) | 用于返回参数ch指定的字符最后一次出现的下标。 |
int lastIndexOf(int ch, int fromIndex) | 用于从fromIndex位置开始查找ch指定字符出现的下标,反向搜索的第一次。 |
int lastIndexOf(String str) | 用于返回str指定字符串最后一次出现的下标。 |
int lastIndexOf(String str, int fromIndex) | 用于从fromIndex位置开始反向搜索的第一次。 |
String substring(int beginIndex) | 用于获取当前字符串中从beginIndex位置开始的子字符串并返回。 |
String substring(int beginIndex, int endIndex) | 用于获取当前字符串中从beginIndex位置开始到endIndex结尾的子字符串并返回。 |
package cn.itxdl.day12;
public class TestStringByteChar {
public static void main(String[] args) {
String s =new String("Good Morning!");
byte[] barr = s.getBytes();
char[] carr = s.toCharArray();
for(int i =0;i<barr.length;i++)
{
System.out.println("第"+i+"个字符为:"+barr[i]+"="+(char)barr[i]);
}
for(int i =0;i<carr.length;i++)
{
System.out.println("第"+i+"个字符为:"+carr[i]);
}
System.out.println(carr);
}
}