String
String表示一個字符串,它的內部是一個字符數組,只用使用方法比較特殊
例如: String str = "Hello World";
String類的重要特點:字符串是不變的; 它的值在創建后不能被更改。
創建了幾個對象
String str = "Hello";
str += "World";
System.out.println(str);//"HelloWorld"
//整個過程產生了3個String對象;
相等嗎
String s1 = "Hello";
String s2 = "Hello";
System.out.println(s1 == s2);//true
String ss1 = new String("Hello");
String ss2 = new String("Hello");
System.out.println(s1 == ss1);//false
System.out.println(ss1 == ss2);//false
String s1 = "Hello";
String s2 = "World";
String s3 = "HelloWorld";
String s4 = "Hello" + "World";//String s4 = "HelloWorld";
System.out.println(s3 == s4);//true
String s5 = s1 + "World";//String s5 = new String("HelloWorld");
String s6 = "Hello" + s2;//String s6 = new String("HelloWorld");
String s7 = s1 + s2;//String s7 = new String("HelloWorld");
System.out.println(s3 == s5);//false
System.out.println(s3 == s6);//false
System.out.println(s3 == s7);//false
判斷方法
String str1 = "hello";
String str2 = "HELLO";
//1).public boolean equals (Object anObject) :將此字符串與指定對象進行比較。
System.out.println(str1.equals(str2));//false
//2).public boolean equalsIgnoreCase (String anotherString) :將此字符串與指定對象進行比較,忽略大小寫。
System.out.println(str1.equalsIgnoreCase(str2));//true
獲取方法
String str1 = "hello";
String str2 = "world";
/**
*1).public int length () :返回此字符串的長度。
*/
System.out.println(str1.length());//5
/**
*2).public String concat (String str) :將指定的字符串連接到該
*字符串的末尾。相當於+
*/
System.out.println(str1.concat(str2));//helloworld
/**
* 3).public char charAt (int index) :返回指定索引處的 char值。
*/
System.out.println(str1.charAt(2));//l
/**
*4).public int indexOf (String str) :查找參數字符串在本字符串中的
*索引位置。如果沒有出現,返回-1
*/
System.out.println(str1.indexOf("o"));//4
/**
*5).public String substring (int beginIndex) :返回一個子字符串,
*從beginIndex開始截取字符串到字符串結尾。
*/
System.out.println(str1.substring(2));//llo
/**
*6).public String substring (int beginIndex, int endIndex) :
*返回一個子字符串,從beginIndex到endIndex截取字符串。
* 含beginIndex,不含endIndex。
*/
System.out.println(str1.substring(2, 4));//ll
轉換方法
/**
* 1).public String replace (CharSequence target, CharSequence replacement)
* 將與target匹配的字符串使用replacement字符串替換。
*/
System.out.println(str1.replace("llo", "he"));//hehe
//replace的oldStr只能是字符和字符串,replaceAll指的是正則表達式,比如'\r'回車 '\n'空格
分割方法
String str1 = "h-e-l-l-o";
/**
* 1).public String[] split(String regex) :將此字符串按照給定的regex
*(規則)拆分為字符串數組。
*/
for (String s : str1.split("-")) {
System.out.print(s);
}
StringBuilder
StringBuilder是一個可變的字符序列。我們可以把它看成一個可變的字符串。
StringBuilder的本質和String一樣,都是由一個字符數組組成的,在使用字符數組保存數據。
構造方法
/**
* StringBuilder(): 空參構造。使用這個構造方法創建的StringBuilder對象,
*里面不會保存任何內容
*/
StringBuilder stringBuilder = new StringBuilder();
/**
* StringBuilder(String str):會根據參數字符串構建一個StringBuilder對象
*/
StringBuilder strBuilder = new StringBuilder("hello");
常用方法
StringBuilder stringBuilder1 = new StringBuilder("hello");
StringBuilder stringBuilder2 = new StringBuilder("world");
/**
* 1).append(): 字符串連接
*/
StringBuilder stringBuilder = stringBuilder1.append(stringBuilder2);
System.out.println(stringBuilder);
/**
* 2).toString():返回相同內容的字符串
*/
String string = stringBuilder.toString();
System.out.println(string);
String與StringBuilder的區別
String類的對象內容不可改變,所以每當進行字符串拼接時,總是會在內存中創建一個新的對象,所以經常改變內容的字符串最好不要用String,因為每次生成對象都會對系統性能產生影響。
StringBuilder又稱為可變字符序列,是JDK5.0中新增加的一個類,它是一個類似於String的字符串緩沖區,通過某些方法調用可以改變該序列的長度和內容。即它是一個容器,容器中可以裝很多字符串,並且能夠對其中的字符串進行各種操作。它的內部擁有一個數組用來存放字符串內容,進行字符串拼接時,直接在數組中加入新內容,StringBuilder會自動維護數組的擴容。
String StringBuffer StringBuilder
String被final修飾,所以String的值是不可變的,這就導致每次對String的操作都會生成新的String對象,所以String s = new String(“helloWorld”); 創建了2個String對象和一個引用。
當對字符串進行修改的時候,需要使用 StringBuffer 和 StringBuilder 類。和 String 類不同的是,StringBuffer 和 StringBuilder 類的對象能夠被多次的修改,並且不產生新的未使用對象。由於 StringBuilder 相較於 StringBuffer 有速度優勢,所以多數情況下建議使用 StringBuilder 類。然而在應用程序要求線程安全的情況下,則必須使用 StringBuffer 類。