javaAPI_String
javaAPI String类[*****]
1.什么是字符串?
字符串就是把多个字符数据组成的一串数据,如把字符'a','b','c'组成一串就成了字符串'abc'。同样可以看成是一个字符数组。
2.构造方法
public String():无参构造
public String(byte[] bytes):把字节数组转化成为字符串
public String(byte[] bytes,int offset,int length):把字节数组的一部分转化成为字符串
public String(char[] value):把字符数组转化为字符串
public String(char[] value,int offset,int length):把字符数组的一部分转化为字符串
public String(String orignal):把字符常量转化为字符串
构造方法代码测试:
public static void main(String[] args) {
//数组直接动态初始化
byte[] bys = {97,98,99,100,101};
String str = new String(bys);
System.out.println(str+"------"+str.length());
System.out.println("---------------");
char[] ch = {'a','你','b','c','d'};
String str1 = new String(ch);
System.out.println(str1+"-----"+str1.length());
System.out.println("---------------");
String str2 = "testString";
System.out.println(str2+"-----"+str2.length());
//省略部分内容测试
}
//输出结果:
abcde------5
---------------
a你bcd-----5
---------------
testString-----10
3.字符串的特点:一旦被赋值,就不能够改变
代码体现以及分析过程:
public static void main(String[] args) {
String s = "hello";
s+="world";
System.out.println(s);
}
//流程:
String s ="hello";在方法区里面开辟空间,在这一个空间里面设置字符串常量值'hello',把变量s指向'hello';由此可见,字符串直接赋值
的方式是先到字符串常量池里面去找,如果有直接就返回,没有,就创建并返回。
s+="world";在这一个操作中,'world'也像hello一样开辟了一个存储空间在方法区里面,但是后面把'hello'和'world'进行拼接,并把这一个
字符串又在常量池里面开辟了一个新的空间,并在里面存储'helloworld',这一个时候再把存储'helloworld'的地址值指向s.
这里面所谓的字符串一旦被赋值,就不能够改变的意思是说在方法区里面'hello'存储地址是不可以改变的。
一个相关面试题:
String s = new String("hello");和String s = "hello"的区别?
有区别,前者会创建俩个对象,后者会创建一个对象。
看代码写结果:
public static void main(String[] args) {
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3 == s1+s2);//false,比较的是地址值,方法区里面存储的地址值。
System.out.println(s3.equals(s1+s2));//true,直接就是指向了方法区里面的helloworld
System.out.println(s3 == "hello"+"world");//true
System.out.println(s3.equals("hello"+"world"));//true
}
结论:
1.字符串如果是变量相加,先开空间,再拼接;
2.字符串如果是常量相加,是先加,然后再在常量池里面找,如果有就直接返回,否则就创建。
4.String的判断功能:
(1).boolean equals(Object obj);比较字符串内容是否相同。区分大小写。
(2).boolean equalsIgnoreCase(Object obj);比较字符串内容是否相同,忽略大小写。
(3).boolean contains(Stirng str);判断字符串中是否包含小字符串。
(4).boolean startWith(String str);判断字符串是否以某一个指定的字符开头。
(5).boolean endWith(String str);判断字符串是否以某一个指定的字符结尾。
(6).boolean isEmpty();判断字符串是否为空。
注意:字符串俩个空表示:[*****]
String s = "";字符串内容为空,可以调用方法
String s = null;字符串对象为空,表示该对象不存在,不可以调用方法,会报空指针异常。
5.String的获取功能:
(1).int length():获取字符串的长度
(2).char charAt(int index):获取指定索引位置的字符
(3).int indexOf(int char):返回指定字符在该字符串中第一次出现处的索引。
为什么是int char?而不是char类型?
原因是'a'和97都可以代表'a'
(4).int indexOf(String str):返回指定字符串在该字符串中第一次出现处的索引。
(5).int indexOf(int ch,int fromIndex):返回指定字符在该字符串中从指定位置后第一次出现处的索引。
(6).int indexOf(String str,int fromIndex):返回指定字符串在该字符串中从指定位置后第一次出现处的索引。
(7).String subString(int start);从指定位置开始截取字符串,默认到末尾。
(8).String subString(int start,int end);从指定位置开始到指定位置结束截取字符串。
获取功能测试:遍历获取一个字符串的所有字符
public static void main(String[] args) {
String str = "helloWorld";
for(int i = 0;i<str.length();i++){
//获取每一个字符
char ch = str.charAt(i);
System.out.println(ch);
}
}
6.String的转化功能
(1).byte[] getBytes():把字符串转化为字节数组。(所谓的字节就是值字符所对应的ASCAII码)
(2).char[] toCharArray():把字符串转化为字符数组。(组成的每一个小字符)
(3).static Stirng valueOf(char[] chs):把字符数组转化为字符串。
(4).static Stirng valueOf(int i):把int类型的数据转化为字符串。
注意:String类的valueOf()方法可以把任意类型的数据转化为字符串。
(5).String toLowerCase():把字符串转化为小写。
(6).Stirng toUpperCase():把字符串转化为大写。
(7).String concat(String str):把字符串进行拼接。
7.字符串的其他常用功能
(1).替换功能
String replace(char old,char new);把单个字符进行替换
String replace(String old,Stirng new);把字符串进行替换
(2).去除空格
String trim();去除字符串俩端的空格
(3).按照字典顺序比较俩个字符串
int compareTo(String str);就是按照ASCII码值的大小对俩个字符串进行比较,结果为ASCII码之间的差值。
int compareToIgnoreCase(String str);