------ android培訓、java培訓、期待與您交流! ----------
一、String類(字符串類)概述:
1、是編程中常用的數據類型,它不是簡單的基本數據類型,而是複合數據類型。
2、它最大的特點是創建之後不能再修改和變動的字符串常量。
3、不用import導入就可以使用,並且這個類不需要擴展,定義爲final類(最終類)不能被其他類繼承。
4、String類實際是使用字符數組存儲的(實際上源代碼就是使用char類型的 )
二、String類的兩種創建方式:
String s1 = new String("java01");
String s2 = "java01";
上面是創建String的兩種方式,效果上是一樣的,只是一般用第二種方式比較簡單。
三、String類兩種創建方式的區別:
1、s1在內存中有兩個對象(一個是new 一個是字符串對象在堆內存中,然後會存儲到常量池中)
2、s2在內存中只有一個對象(該字符對象存在字符串常量池中,會先查看常量池中有沒有這個字符串常量,如果有就直接指向不用再創建了,如果沒有常量池中會創建)
3、s2是一個類類型變量,指向對象,"java01"是一個對象。字符串是一個特殊的對象也是一個常量,初始化後不能改變,被雙引號裏面的都是對象(存在常量池中)
String s1 = "java01";
s1 = "java02";
System.out.println(s2);
最後的結果是java02,但不是java01這個對象變化了,而是s1的指向變成了指向java02這個對象,java01這個對象在內存中還是存在的。
四、比較兩個字符串是否相等(兩種比較方式):
String s1 = new String("java01");
String s2 = new String("java01");
System.out.println(s1==s2);//結果是false,因爲s1和s2都是用new關鍵字創建的對象,這是不屬於同一個對象(內存地址值不一樣),所以當然是不相等
System.out.println(s1.equals(s2));//結果爲true,因爲String類複寫了Object類中的equals方法,定義了自己的比較方式,只要String的參數相同則爲true否則爲false。
==和equals這兩種比較方式都是比較的對象的內存地址值,但是equals這個方法被String類複寫了,定義了自己的比較方式而已
String s1 = "java01";
String s2 = new String("java01");
String s3 = "java01";
System.out.println(s1==s2);//flase
System.out.println(s1==s3);//結果爲true,是因爲s1已經創建了字符串"java01",s3就不會再創建該字符串了,這樣可以節省空間,這代表着s1和s3指向同一個對象"java01"。
五、String類的使用:
1、獲取字符串的長度(注意是方法,不是跟數組的屬性一樣的)
int length();
public static void getLength(){
String s = "java01";
int len = s.length();
System.out.println(len);
}
2、根據位置,獲取該位置的那一個字符(只能是單個字符)
char charAt(int index);
//根據指定位置獲取對應的那個字符,只能是一個字符不能是字符串
public static void getChar(){
String s1 = "java01";
char ch = s1.charAt(3);
System.out.println(ch);
//s1.charAt(45);當訪問到字符串中不存在的角標是會發生StringIndexOutOfBoundsException,即字符串角標越界異常
}
3、根據字符或字符串獲取索引,即根據字符或字符串獲取該字符或字符串在整個字符串中的位置,如果字符串中沒有該字符或字符串會返回-1
int indexOf(int ch):返回的是ch在字符串中第一次出現的位置
int indexOf(int ch,int fromIndex):從fromIndex指定位置開始查找,獲取ch在字符串中出現的位置
int indexOf(String str):返回的是str在字符串中第一次出現的位置
int indexOf(String str,int fromIndex):從fromIndex指定位置開始查找,獲取str在字符串中出現的位置
public static void getIndexOf(){
String s = "javascript";
int x1 = s.indexOf('s');
int x2 = s.indexOf('a',2);
int x3 = s.indexOf("script");
int x4 = s.indexOf("script",2);
System.out.println("x1="+x1+",x2="+x2+",x3="+x3+",x4="+x4);
}
4、反向索引一個字符或字符串出現的位置
public int lastIndexOf(int ch) 從字符串的最後向前查找,指定的字符是否存在,如果存在則返回位置,如果不存在則返回-1
public int lastIndexOf(int ch,int fromIndex) 從字符串的指定的末尾向前查找,指定的字符是否存在,如果存在則返回位置,如果不存在則返回-1
public static void getLastIndexOf() {
String s = "javascript";
int x = s.lastIndexOf('a');
System.out.println("x="+x);
}
5、獲取字符串中的一部分,即獲取子串
String substring(begin);//從指定位置開始到結尾包含頭
String substring(begin,end);//,指定開始和結尾 包含頭不包含尾
public static void getSubstring(){
String s1 = "javascript";
String s2 = s1.substring(4);
String s3 = s1.substring(0,5);
System.out.println("s2="+s2+",s3="+s3);
}
六、字符串轉換:
1、將字符數組轉成字符串
構造函數:
String(char[])
Stirng(char[],fffset,count):將字符數組中的一部分轉換字符串
靜態方法:(直接用String類名調用,如:String s = String.copyValueOf())
static String copyValueOf(char[]);
static String copyValueOf(char[] ,int offset, int count);(offset表示起始位,count表示個數.如果超過了字符數組的長度,也發生字符串角標越界)
static String valueOf(char[]);
static String valueOf(char[] data, int offset, int count)
public static void CharsToString(){
char[] arr ={'j','a','v','a','s','c','r','i','p','t'};
//通過String類的構造函數將字符數組轉成字符串(可以將字符數組的一部分轉成字符串)
String s1 = new String(arr);
String s2 = new String(arr,2,7);
System.out.println("s1="+s1+",s2="+s2);
//通過String類中的靜態方法將字符數組轉成字符串(可以將字符數組的一部分轉成字符串)
String s3 = String.copyValueOf(arr);
String s4 = String.copyValueOf(arr, 2, 7);
System.out.println("s3="+s3+", s4="+s4);
}
2、將字符串轉成字符數組
char[] toCharArray();
public static void StringToChar(){
String s = "javascript";
char[] arr = s.toCharArray();
for(char arrs : arr){
System.out.println(arrs);
}
}
3、將字節數組轉成字符串(只能用構造函數)
String(byte[])
Stirng(byte[],fffset,count):將字節數組中的一部分轉
Stirng(byte[],String charsetName)(通過使用指定的charset解碼制定的byte數組,構造一個新的String)
String info = "小白是一個無節操,無干爹,無底線的三無少年";
//把字符串轉換成字節數組
byte[] bytes = info.getBytes();
for(int i = 0;i<bytes.length; i++){
System.out.print(bytes[i]+",");
}
System.out.println();
//把字節數組轉換成字符串
String s1 = new String(bytes);
System.out.println("轉換後的字符串爲:"+s1);
String s2 = new String(bytes,0,16);//結果是:小白是一個無節操,因爲一個漢字是兩個字節,如果是15的話最後一個漢字打印的是一個? 因爲找不到
System.out.println("s2="+s2);
String s3 = new String(bytes,"gbk");//系統是gbk編碼,如果這裏用了utf-8會變成亂碼
System.out.println(s3);
4、將字符串轉成字節數組(字符串和字節數組在轉換過程中,是可以指定編碼表的。)
byte[] getBytes();
public static void StringToBytes(){
String s1 = "javascript";
byte[] arr = s1.getBytes();
for(byte arrs : arr){
System.out.println((char)arrs);
}
}
String info = "小白是一個無節操,無干爹,無底線的三無少年";
//把字符串轉換成字節數組
byte[] bytes = info.getBytes();
for(int i = 0;i<bytes.length; i++){
System.out.print(bytes[i]+",");
}
5、將基本的數據類型轉成字符串
static String valueOf(int)
static String valueOf(double)
3+""; String.valueOf(3);//這是一樣的
6、將字符串轉成大寫或者小寫
String toUpperCase();
String toLowerCase();
public static void ToUpper_Lower(){
String s1 = "javascript";
String s2 = s1.toUpperCase();//轉成大寫
String s3 = s2.toLowerCase();//轉成小寫
System.out.println("s2="+s2+",s3="+s3);
}
七、字符串判斷:
1、字符串中是否含某一個子串(不能判斷是否包含某一個字符,只能是字符串)
boolean contains(String str); //返回一個字符串是否存在,存在返回true 不存在返回false
特殊之處:indexOf(str)可以索引str第一次出現位置,如果返回-1,表示該str不在字符串中存在 所以也可以用於對指定判斷是否包含 該方法既可以判斷又可以獲取出現的位置
只用於判斷時用contains,既要判斷又要獲取位置用indexOf
public static void containsDemo() {
String s = "javascript";
boolean b = s.contains("java");
System.out.println(b);
}
2、字符中是否有內容
boolean isEmpty(); //就是判斷長度是否爲0
public static void isEmptyDemo() {
String s = " ";//空格也是一個字符
boolean b = s.isEmpty();
System.out.println(b);
}
3、字符串是否以指定的內容開頭與字符是否是以指定內容結尾(接受的是字符串)
boolean startsWith(str);
boolean startsWith(str,int toffset);//從指定的位置開始判斷是否以指定的內容開頭
boolean endsWith(str);
public static void startsWith_endsWith() {
String s = "Array.java";
boolean b1 = s.startsWith("Array");//開發中可以用於判斷該文件名稱是否是Array單詞開頭
boolean b2 =s.endsWith(".java");//開發中可以用於判斷該文件名的後綴是否是.java文件
System.out.println("b1="+b1+",b2="+b2);
}
4、判斷字符串內容是否相同
(複寫了Object類中的equals方法,定義了自己的比較方式,比較字符串內容是否相同,相同爲true,不相同爲false) boolean equals(str);
public static void equalsDemo() {
String s1 = "javascript";
String s2 = "javascript";
String s3 = "html+CSS";
boolean b1 = s1.equals(s2);
boolean b2 = s1.equals(s3);
System.out.println("b1="+b1+",b2="+b2);
}
判斷內容是否相同,並忽略大小寫 boolean equalsIgnoreCase();
5、對兩個字符串進行自然順序的比較(該方法能比較出誰大誰小,而equals只是比較兩個對象是否相等)
int compareTo(string);
對象之間的比較用的是compareTo方法,基本數據類型數據之間的比較用的是大於號,小於號,等於號這些運算符
public static void compareToDemo() {
String s1 = "javascript";
String s2 = "javascript";
String s3 = "java";
int b1 = s1.compareTo(s2);
int b2 = s1.compareTo(s3);
int b3 = s3.compareTo(s1);
System.out.println("b1="+b1+",b2="+b2+",b3="+b3);
}