String 類(被final修飾)
字符串是一種特殊的對象,一旦字符串被初始化就不可以被改變了.(內容不變)
例如:
String s = “abc”;
String s1 = new String(“abc”);
s在內存中有一個對象, s代表的是一個類類型變量,”abc”是一個對象.
s1在內存中有兩個對象,分別是new出來的和: “abc” .
s == s1;的結果是false. 因為s和s1它們所對應的地址不同,比較的兩個地址,s和s1中存儲的地址數值是不同的.因此是false.
s.equals(s1);的結果則為true. equals是比較兩個對象的內容是否相同,
"=="和 equals 方法的區別:
==操作符專門用來比較兩個變量的值是否相等,也就是用于比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操作
符.
如果一個變量指向的數據是對象類型的,這時候涉及了兩塊內存,對象本身占用一塊內存(堆內存),變量也占用一塊內存,在 Objet obj = new Object();變量 obj 是一個內存,new Object()是另一個內存,此時,變量 obj 所對應的內存中存儲的數值就是對象占用的那塊內存的首地址.對于指向對象類型的變量,如果要比較兩個變量是否指向同一個對象即要看這兩個變量所對應的內存中的數值是否相等,這時候就需要用==操作符進行比較.
equals 方法是用于比較兩個獨立對象的內容是否相同,它比較的兩個對象是獨立的.
String a=new String("abc");
String b=new String("abc");
兩條 new 語句創建了兩個對象,然后用 a和b 兩個變量分別指向了其中一個對象,這是兩個不同的對象,它們的首地址是不同的,即 a 和 b 中存儲的數值(地址值)是不相同的,所以,表達式 a==b 將返回 false,而這兩個對象中的內容是相同的,所以,表達式 a.equals(b)將返回true.
String類中復寫了Object類中的equals方法,用于判斷字符串是否相同.
參見代碼:StringDemo.java
1 class StringDemo 2 { 3 public static void main(String args[]) 4 { 5 String s = "abc"; //s是一個類類型的變量."abc"是一個對象 6 String s1 = new String("abc"); //s1中有兩個對象. 7 8 //s和s1的區別: 9 // 在s中有一個對象"abc",一個類類型變量10 // 在s1中有兩個對象.分別是new出來的和"abc"11 12 System.out.PRintln(s==s1); //輸出的結果為false13 System.out.println(s.equals(s1)); //輸出的結果為true.14 15 }16 }17 18
String類中的常見方法操作.
1. 獲取操作.
1.1獲取字符串中字符個數,即獲取字符串的長度.
方法返回類型為: int length()
與數組中length的區別: 在數組中:用的是 .length 即用的是length的屬性.
在字符串中:用的是length() 即用的是length方法.
1.2 根據位置獲取字符串中的某個字符.
方法返回類型為: char CharAt(int index =>角標) 參數中是想獲取字符的位置, 參數中輸入的是想獲取的字符的角標
1.3 根據字符獲取該字符在字符串中的位置.
方法1:
返回值類型為: int indexOf(int ch =>想獲取的字符) 參數中輸入的是想獲取的字符的位置.
方法2:
返回值類型為: int indexOf(int ch,fromIndex)
從fromIndex開始獲取.
獲取字符串中字符串的位置: 返回類型:intint indexOf(int ch)
獲取從fromIndex位置開始的字符串的位置:
返回類型: int 方法:indexOf(int ch,fromIndex)
反向索引一個字符串中字符的位置,
lastIndexOf(int ch,fromIndex)
2. 判斷操作.
2.1 字符串中是否包含有某一個子串.
返回類型:boolean 方法:contains(str);
IndexOf(str)可以索引第一次出現的位置.如果返回-1.則說明沒有索引到,
If(str.indexOf(“字符串”)!=-1) 該方法即可以判斷也可以獲取位置.
2.2 字符中是否有內容.
返回類型: boolean 方法:isEmpty(); 判斷長度是否為空.
2.3 字符串是否以指定的內容開頭.
返回類型:boolean 方法:startsWith(str);
2.4字符串是否以指定的內容結尾.
返回類型:boolean 方法:endsWith(str);
2.5 判斷字符串的內容是否相同
返回值類型:boolean equals(str);
2.6忽略大小寫判斷字符串是否相同.
equalsIgnoreCase(str)
3. 轉換
3.1 將字符數組轉成字符串.
構造函數:String(char[])
String(char[],offset,count):將字符數組中的一部分轉成字符串.
靜態方法:
static String copyValueOf(char[]);
static String copyValueOf(char[] data, int offset, int count)
static String valueOf(char[]):
3.2 將字符串轉成字符數組。(重要)
返回類型:char[] 方法:toCharArray():
3.3 將字節數組轉成字符串.
String(byte[])
String(byte[],offset,count):將字節數組中的一部分轉成字符串.
3.4 將字符串轉成字節數組.
返回類型:byte[] 方法:getBytes():
3.5 將基本數據類型轉成字符串
static String valueOf(int)
static String valueOf(double)
3+""; //String.valueOf(3); 兩者的結果是相同的,都是輸出的字符串類型的”3”
特殊之處:字符串和字節數組在轉換過程中,是可以指定編碼表的.
4. 替換
String replace(oldchar,newchar);
5. 切割
String[] split(regex);
6. 子串,獲取字符串中的一部分.
String substring(begin);
String substring(begin,end);
7. 轉換,去除空格,比較.
7.1 將字符串轉成大寫或則小寫.
String toUpperCase();
String toLowerCase();
7.2 將字符串兩端的多個空格去除.
String trim();
7.3 對兩個字符串進行自然順序的比較.
int compareTo(string);
練習實例代碼:
1 class StringFunctionDemo 2 { 3 public static void main(String args[]) 4 { 5 //functionLength(); 6 //functionJudge(); 7 //functionTrans(); 8 //functionReplace(); 9 //functionSplit(); 10 functionSub(); 11 function_7(); 12 } 13 //去除空格,轉成大寫或者小寫,輸出,比較兩個字符串的大小. 14 public static void function_7() 15 { 16 String str = " Hello Java "; 17 printer(str.toLowerCase()); //全部轉換為小寫字母輸出 18 printer(str.toUpperCase()); //全部轉換為大寫字母輸出 19 printer(str.trim()); //將字符串兩邊的空格去除輸出字符串. 20 21 String str1 = "aba"; 22 String str2 = "aaa"; 23 24 printer(str1.compareTo(str2)); //將兩個字符串進行自然順序比較大小 正數表示前面的字符串大.負數后面的字符串大. 25 } 26 //截取字符串中的子串字符串. 27 public static void functionSub() 28 { 29 String str = "abcdef"; 30 31 printer(str.substring(2));//從指定位置開始到結尾。如果角標不存在,會出現字符串角標越界的異常。 32 printer(str.substring(2,4));//包含開頭頭,不包含結尾 str.substring(0,s.length()); 33 } 34 35 36 //定義了一個將字符串轉換為字符串數組的方法 37 public static void functionSplit() 38 { 39 String str = "zhagnsan,lisi,wangwu,qianliu"; 40 41 String[] arr = str.split(","); //將字符串轉換為字符組數組. 42 43 for(int x = 0; x < arr.length; x++) 44 { 45 printer("String [] arr = "+arr[x]); 46 } 47 } 48 49 50 //定義了替換字符串內容的有關方法 51 public static void functionReplace() 52 { 53 String str = "hello java"; 54 55 //String str1 = s.replace('q','n'); //如果要替換的字符不存在,返回的還是原來的字符串. 56 57 String str1 = str.replace("java","world"); //用字符串"world"替換原來字符串中的"java". 58 printer("str="+str); 59 printer("str1="+str1); 60 } 61 62 63 //定義了一個字符串和字符數組之間轉換相關的方法 64 public static void functionTrans() 65 { 66 char [] arr = new char []{'a','b','c','d','e'}; 67 String str = new String(arr); 68 String str1 = new String(arr,1,3); //將字符從1角標的元素開始的后面3個元素一起轉化成字符串 69 printer("str = "+str); //將字符數組轉換成字符串. 70 printer("str1 = "+str1); 71 72 String str2 = "abcdefg"; 73 char [] ch = str2.toCharArray(); //將字符串轉換為字符數組 74 for(int i = 0;i<ch.length;i++) 75 { 76 printer("ch = "+ch[i]); //將字符數組打印出來. 77 } 78 } 79 //定義了判斷字符串有關的方法操作 80 public static void functionJudge() 81 { 82 String str = "HelloWorld.java"; 83 84 printer(str.contains("java")); //判斷是否保護字符串"java" 85 86 printer(str.isEmpty());//判斷長度是否為0; 87 88 printer(str.startsWith("Hello")); //判斷是否是"Hello"字符串開頭 89 90 printer(str.endsWith(".java")); //判斷是否是".java"的文件. 91 } 92 93 //定義了獲取字符串位置的有關方法 94 public static void functionLength() 95 { 96 97 String s = "abcdefgaqw"; 98 99 printer(s.length());//輸出字符串的長度.100 101 printer(s.charAt(5));//當輸入的角標超出范圍時,會發生字符串角標越界的異常.102 103 printer(s.indexOf('a')); //獲取字符'a'在字符串中的位置.獲取的是第一次出現的位置.104 105 printer(s.indexOf('a',2)); //從位置2開始索引a.106 107 printer(s.indexOf('z')); //如果沒有找到,則返回-1.輸出的結果-1.108 109 printer(s.lastIndexOf('c',4)); //反向索引字符在字符串中的位置.110 111 }112 113 114 115 public static void printer(Object obj)116 {117 System.out.println(obj);118 }119 120 }
新聞熱點
疑難解答