String類
1.1 String類概述
Java中字串屬於物件,String類用於建立和操作字串。
最簡單的字串建立:直接透過String建立
String str="工地佬";
利用String構造器建立字串
String str=new String("工地佬");
字串的特點:
-
String物件是不可變的。字串(常量)一旦被建立,其內容是不可變的。
-
String建立的字串物件是儲存在字串池中的,是可以共享的。
-
new建立的字串物件是儲存在堆記憶體中的
String str="工地佬";
str="工具人";
System.out.println(str);
工具人//很明顯,str的地址指向指向了常量池中的"工具人"
我們對上面程式碼進行記憶體分析
第一行程式碼在常量池中建立的面值為"工地佬"字串且賦值給str,str指向常量池中的"工地佬";
第二行程式碼 str="工具人";程式並沒有將"工地佬"改成"工具人",而是在常量池中建立了新的字串”工具人“,並將引用賦值給了str,此時原來的字串物件在常量池中便失去了指向,但依然存在。
在Java中,Java虛擬機器為了節約記憶體,將具有相同序列的字串字面值使用同一個物件!
String s1="工地佬"; //String直接建立
String s2=new String("工地佬"); //new建立
String s3=s1; //引用相同
String s4=new String("工地佬"); //new建立
//== 在引用型別使用時判斷的是引用地址是否相同
System.out.println(s1==s2);//s1是建立在常量池中,s2是建立在堆記憶體中,兩者引用不同,自然也就不會相同
System.out.println(s1==s3);//s1是建立在常量池中,而s1的地址引用賦值給了s3,則兩者引用地址相同
System.out.println(s2==s4);//s2、s4均由new產生,兩者開闢了不同的記憶體空間,則地址不同,所以不相等
false
true
false
1.2 String類的常用方法
-
返回字串長度
public int length();非靜態方法,需要例項化才能使用
public class Test{
public static void main(String[] args){
String a="java";
System.out.println(a.length());//length方法為非靜態方法,需要透過物件來呼叫
}
}
4
- 獲取指定下標的字元
public char charAt(int index);非靜態方法,需要例項化才能使用
public class Test{
public static void main(String[] args){
String a="java";
System.out.println(a.charAt(0));
}
}
j
- 判斷字串中是否含有指定的字串
public boolean contains();非靜態方法,例項化後可用;判斷物件中是否含有字串str,並返回布林值
public class Test{
public static void main(String[] args){
String a="java";
System.out.println(a.caontains("j"));
}
}
true
- 將字串轉為陣列
public char[] toCharArray(String str); 將字串以陣列的形式返回
public class Test{
public static void main(String[] args){
String a="工地佬";
System.out.prtintln(a.toCharArray());
//此時已經是陣列,我們可以呼叫陣列的列印功能,讓控制檯輸出的陣列更加規範
System.out.println(Arrays.toString(b.toCharArray()));
}
}
工地佬
[工,地,佬]
- 搜尋子字串在字串中的首次出現位置的下標值
public int indexOf(String str); 返回子字串在物件中首次出現的下標值;如果物件中不含有待搜尋的字串則會返回-1
public class Test{
public static void main(String[] args){
String a="中交第二航務工程局建築工程有限公司";
System.out.println(a.indexOf("中"));
System.out.println(a.indexOf("佬"));
//String中關於indexOf還有過載的方法
//可以定義從物件字串中哪一個下標開始進行索引
System.out.println(a.indexOf("工",7));//意為從物件字串值中下標為7的字元開始索引"工",並返回索引成功後的下標
}
}
1
-1
11
- 搜尋子字串在物件中出現的最後一次的下標值
public int lastIndexOf(String str);返回子字串在物件中最後一次出現的下標值;如果物件中不含有待搜尋的字串則會返回-1
public class Test{
public static void main(String[] args){
String a="中交第二航務工程局";
System.out.println(a.lastIndexOf("中"));
//同樣,若待查詢的子字串在物件中並不存在的話,將返回-1
System.out.println(a.lastIndexOf("佬"));
}
}
1
-1
- 去除字串前後的空格
public String trim(); 將字串前後的空格去除掉後返回; (原始字串沒有被改變,返回的是一個新的字串)
public class Test{
public static void main(String[] args){
String a=" 中交 第二航務 工程局 ";
System.out.println(a.trim());
}
}
中交 第二航務 工程局
- 大小寫轉換
public String toUpperCase(); 將字串中的小寫全部轉回大寫,並返回
public String toLowerCase(); 將字串中的大寫全部轉回小寫,並返回
public class Test{
public static void main(String[] args){
String a="java IS THE best Language";
System.out.println(a.toUpperCase());
System.out.println(a.toLowerCase());
}
}
JAVA IS THE BEST LANGUAGE
java is the best language
- 判斷字串是否以子字串為結尾
public boolean endsWith(String str);判斷字串中是否已str為結尾,返回布林值
public boolean startsWith(String str);判斷字串中是否已str為開頭,返回布林值
public class Test{
public static void main(String[] args){
String a="java is the best language in the world!"
System.out.println(a.endsWith("in"));
System.out.println(a.startsWith("in"));
}
}
false
false
- 將字串中的目標字串替換成新的字串
public String replace(char oldChar,char newChar);
public class Test{
public static void main(String[] args){
String a="java is the best language in the world!";
System.out.println(a.replace("in","all over"));
}
}
java is the best language all over the world!
- 根據給定條件對字串進行拆分
public String[] split(String str); 將字串按照給定的str為拆分訊號進行拆分,並重新組合成字串陣列返回
public class Test{
public static void main(String[] args){
String a="java is the best language in the world!";
System.out.println(Array.toString(a.split(" ")));
String b="工 地 佬 ,是 牛 馬";
//如果字串中含有空格,逗號,該如何拆分字串
//[ ,] 表示選擇"空格"或者","為分隔符進行拆分
System.out.println(Array.toString(b.split("[ ,]")));
//如果字串中空格或者逗號的個數有多個,應該怎麼拆分得到有效字串呢
//[ ,]+ 表示選擇一個或者多個"空格"或者","為分隔符進行拆分
String b="工 地 佬 ,是 牛 馬";
System.out.println(Array.toString(b.split("[ ,]+")));
}
}
[java, is, the, best, language, in, the, world]
[java, is, the, best, language, in, the, world]
[java, is, the, best, language, in, the, world]
- 提取字串中子字串
public String subString(int beginIndex); 返回從指定下標到結尾的子字串
過載方法:public String subString(int beginIdex,int endIndex);返回指定下標區域的子字串並返回
public class Test{
public static void main(String[] args){
String a="java is a computer language!"
String b=a.subString(5);
System.out.println(b);
System.out.println(b.subString(5,10))
}
}
is a computer language!
is a
- 比較字串內容是否相等
public boolean equals(Object o); String類中的equals方法是重寫了Object中的equals方法,其功能為比較兩者內容是否一致
public class Test{
public static void main(String[] args){
String a="bba";
String b=new String("bba");
System.out.println(a.equals(b));//String類中的equals已經重寫,功能為比較兩個物件的內容是否一致,並非地址
}
}
true
public int compareTo(String str); 比較兩個字串的Unicode碼的差值
public class Test{
public static void main(String[] args){
String a="bba";
String b="background";
System.out.println(a.compareTo(b));//兩者比較對應字元的Unicode碼差值,出現差值後,結束比較
//特殊情況 兩個字串面值屬於包含關係,那麼比較的則是字串長度
String c="back";
System.out.println(b.compareTo(c));//b包含c,兩者比較則是比較字串長度
}
}
1
6