簡述
String是一個引用類型的表示字符序列的不可變類,它大小固定,一旦被賦值就無法被改變,屬於java.long包下的常量,因爲不可變,所以可以共享例如:
String str = "abc";
等效於:
char data[] = {'a', 'b', 'c'}; String str = new String(data);
String s = new String(“hello”)和String s = “hello”;的區別? * 有。前者會創建2個對象,後者創建1個對象或0個對象(如果方法區的字符串常量池有的話就不用創建對象)。
所有已實現的接口:
Serializable,Charswquence,Comparable<String>
String
類包括的方法可用於檢查序列的單個字符、比較字符串、搜索字符串、提取子字符串、創建字符串副本並將所有字符全部轉換爲大寫或小寫。大小寫映射基於 Character 類指定的 Unicode 標準版。
Java 語言提供對字符串串聯符號("+")以及將其他對象轉換爲字符串的特殊支持。字符串串聯是通過 StringBuilder
(或 StringBuffer
)類及其 append
方法實現的。字符串轉換是通過 toString
方法實現的,該方法由 Object
類定義,並可被 Java 中的所有類繼承。
構造方法除非另行說明,否則將 null 參數傳遞給此類中的構造方法或方法將拋出 NullPointerException。
String
表示一個 UTF-16 格式的字符串,其中的增補字符 由代理項對 表示(有關詳細信息,請參閱 Character
類中的Unicode字符表示形式)。索引值是指 char
代碼單元,因此增補字符在 String
中佔用兩個位置。
String
類提供處理 Unicode 代碼點(即字符)和 Unicode 代碼單元(即 char
值)的方法
構造方法
String():
初始化一個新創建的 String
對象,使其表示一個空字符序列。
String(byte[] bytes)
:通過使用平臺的默認字符集解碼指定的 byte 數組,構造一個新的 String
。
String(byte[] bytes, Charsetcharset):
使用指定的 charset解碼指定的 byte 數組,構造一個新的 String
。
String(byte[] bytes, int offset, int length):
使用平臺的默認字符集解碼指定的 byte 子數組,構造一個新的 String
。
String(byte[] bytes, int offset, int length, Charsetcharset):
使用指定的 charset解碼指定的 byte 子數組,構造一個新的 String
。
String(byte[] bytes, int offset, int length, String charsetName):
使用指定的字符集解碼指定的 byte 子數組,構造一個新的 String
。
String(byte[] bytes, StringcharsetName):
使用指定的 charset解碼指定的 byte 數組,構造一個新的 String
。
String(char[] value):
分配一個新的 String
,使其表示字符數組參數中當前包含的字符序列。
String(char[] value, int offset, int count):
分配一個新的 String
,它包含取自字符數組參數一個子數組的字符
String(int[] codePoints, int offset, int count):
分配一個新的 String
,它包含 Unicode 代碼點數組參數一個子數組的字符。
String(String original):
初始化一個新創建的 String
對象,使其表示一個與參數相同的字符序列;換句話說,新創建的字符串是該參數字符串的副本。
String(StringBuffer buffer):
分配一個新的字符串,它包含字符串緩衝區參數中當前包含的字符序列。
String(StringBuilder builder):
分配一個新的字符串,它包含字符串生成器參數中當前包含的字符序列。
public class demo01 {
public static void main(String[] args) {
//public String():空構造
String str1 = new String();
System.out.println("str1:"+str1);
System.out.println("str1.length:"+str1.length());
System.out.println("----------------------------");
//public String(byte[] bytes):把字節數組轉成字符串
byte[] bys = {97,98,99,100,126};
String str2 = new String(bys);
System.out.println("str2:"+str2);
System.out.println("str2.length:"+str2.length());
System.out.println("----------------------------");
//public String(byte[] bytes,int offset,int length):把字節數組的一部分轉成字符串
String str3 = new String(bys,2,3);
System.out.println("str3:"+str3);
System.out.println("str3.length:"+str3.length());
System.out.println("----------------------------");
//public String(char[] value):把字符數組轉成字符串
char[] c = {'a','b','c','愛','生','活'};
String str4 = new String(c);
System.out.println("str4:"+str4);
System.out.println("str4.length:"+str4.length());
System.out.println("----------------------------");
//public String(char[] value,int offset,int count):把字符數組一部分轉成字符串
String str5 = new String(c,3,3);
System.out.println("str5:"+str5);
System.out.println("str5.length:"+str5.length());
System.out.println("----------------------------");
//public String(String original):把一個字符串常量轉成字符串
String str6 = new String("hello world");
System.out.println("str6:"+str6);
System.out.println("str6.length:"+str6.length());
System.out.println("----------------------------");
//字符串字面值"hello world"也可以看成是一個字符串對象。
String s7 = "hello world";
System.out.println("s7:"+s7);
System.out.println("s7.length():"+s7.length());
}
}
輸出結果:
str1:
str1.length:0
----------------------------
str2:abcd~
str2.length:5
----------------------------
str3:cd~
str3.length:3
----------------------------
str4:abc愛生活
str4.length:6
----------------------------
str5:愛生活
str5.length:3
----------------------------
str6:hello world
str6.length:11
----------------------------
s7:hello world
s7.length():11
方法
boolean equals(Object obj):比較字符串的內容是否相同,區分大小寫
boolean equalsIgnoreCase(String str):比較字符串的內容是否相同,忽略大小寫
boolean contains(String str):判斷大字符串中是否包含小字符串
boolean startsWith(String str):判斷字符串是否以某個指定的字符串開頭
boolean endsWith(String str):判斷字符串是否以某個指定的字符串結尾
boolean isEmpty():判斷字符串是否爲空
boolean matches(String
regex):此字符串是否匹配給定的正則表達式。
int length():獲取字符串的長度
char charAt(int index):獲取指定索引位置的字符
int indexOf(int ch):返回指定字符再次字符串中第一次出現處的索引
爲什麼這裏參數是int類型,而不是char類型?
原因是:‘a’ 和 97 其實都可以代碼‘a’。
int indexOf(String str):返回指定字符串再次字符串第一次出現處的索引
int indexOf(int ch,int fromIndex):返回指定字符在此字符串中從指定位置後第一次出現處的索引
int indexOf(String str,int fromIndex):返回指定字符串在此字符串中從指定位置後第一次出現處的索引
String substring(int start):從指定位置開始獲取字符串,默認到末尾,包括start索引
String substring(int start,int end):從指定位置開始到指定位置結束獲取字符串,包括start索引,不包括end索引
byte[] getBytes():把字符串轉換成字節數組
char[] toCharArray():把字符串轉換爲字符數組
static String valueOf(char[] chs):把字符數組轉換成字符串
static String valueOf(int i):把int類型的數據轉成字符串
注意:String類的valueOf方法可以把任意類型的數據轉成字符串
String toLowerCase():把字符串轉成小寫
String toUpperCase():把字符串轉成大寫
String concat(String str):把字符串拼接
String
replaceFirst(String
regex, String
replacement):使用給定的 replacement 替換此字符串匹配給定的正則表達式的第一個子字符串。
String replaceAll(String regex,String replacement): 替換此字符串所有匹配給定的正則表達式的子字符串
·String replace(char old,char new) 舊串替換爲新串
String replace(String old,String new)舊串替換爲新串
int compareTo(String str)按字典順序比較兩個字符串 ,如果按字典順序此 String
對象位於參數字符串之前,則比較結果爲一個負整數。如果按字典順序此 String
對象位於參數字符串之後,則比較結果爲一個正整數。如果這兩個字符串相等,則結果爲 0;compareTo
只在方法 equals(Object) 返回 true
時才返回 0
。
int compareToIgnoreCase(String str) 按字典順序比較兩個字符串 ,忽略大小寫
trim()去除空格
String [] split(String regex,int limit):根據匹配給定的正則表達式來拆分此字符串
例如,字符串 "boo:and:foo" 使用這些表達式可生成以下結果:
Regex 結果 : { "boo", "and", "foo" } o { "b", "", ":and:f" }
String format(String format,Object... args):使用指定的格式字符串和參數返回一個格式化字符串
String StringBuffer StringBuilder區別
String:不可變字符序列,非線程安全,適用於少量的字符串操作的情況
StringBuilder:可變字符序列,非線程安全,適用於單線程下在字符緩衝區進行大量操作的情況
StringBuffer:可變字符序列,線程安全,適用多線程下在字符緩衝區進行大量操作的情況