Java-字符串-String

String

Java程序中全部的字符串文字(例如"abc" )均可以被看做是實現此類的實例。html

特色:java

一、字符串String類型自己是final聲明的,意味着咱們不能繼承String。jquery

二、字符串的對象也是不可變對象,意味着一旦進行修改,就會產生新對象正則表達式

  咱們修改了字符串後,若是想要得到新的內容,必須從新接受。算法

三、String對象內部是用字符數組進行保存的api

  JDK1.9以前有一個char[] value數組,JDK1.9以後byte[]數組數組

四、String類中這個char[] values數組也是final修飾的,意味着這個數組不可變,而後它是private修飾,外部不能直接操做它,String類型提供的全部的方法都是用新對象來表示修安全

改後內容的,因此保證了String對象的不可變。app

五、就由於字符串對象設計爲不可變,那麼因此字符串有常量池來保存不少常量對象,能夠共享ui

  若是涉及到大量的字符串修改操做,建議使用StringBuffer或StringBuilder

String對象的建立

一、字面常量值

  String str = "hello";

二、使用構造器

  • public String() :初始化新建立的 String對象,以使其表示空字符序列。

  • String(String original): 初始化一個新建立的 String 對象,使其表示一個與參數相同的字符序列;換句話說,新建立的字符串是該參數字符串的副本。

  • public String(char[] value) :經過當前參數中的字符數組來構造新的String。

  • public String(char[] value,int offset, int count) :經過字符數組的一部分來構造新的String。

  • public String(byte[] bytes) :經過使用平臺的默認字符集解碼當前參數中的字節數組來構造新的String。

  • public String(byte[] bytes,String charsetName) :經過使用指定的字符集解碼當前參數中的字節數組來構造新的String。

三、靜態方法

  • static String copyValueOf(char[] data): 返回指定數組中表示該字符序列的 String

  • static String copyValueOf(char[] data, int offset, int count):返回指定數組中表示該字符序列的 String

  • static String valueOf(char[] data) : 返回指定數組中表示該字符序列的 String

  • static String valueOf(char[] data, int offset, int count) : 返回指定數組中表示該字符序列的 String

  • static String valueOf(xx value):xx支持各類數據類型,返回各類數據類型的value參數的字符串表示形式。

四、xx.toString() 

  StringBuffer s = new StringBuffer(xx);
  String str = s.toString();  :返回字符串對象

五、和字符串的拼接+

  任意數據類型與"字符串"進行拼接,結果都是字符串

String對象的個數

String str = "hello";  //1個

String str = new String("atguigu");  //2個

String s1 = "hello";//1個
String s2 = "world";//1個

String s3 = s1 + s2 + "java";  //"java"1個,s1 + s2拼接結果1個,最後結果1個

字符串對象的內存分析

String對象的拼接

一、+

(1)常量+常量:結果是常量池

(2)常量與變量 或 變量與變量:結果是堆

  指向堆中的字符串常量 + 常量:結果都在堆

(3)拼接後調用intern方法:結果在常量池

二、concat:拼接的結果都是新的字符串,哪怕是兩個常量對象拼接,都在堆中

String s1 = "hello";
String s2 = "world";

String s3 = s1 + "world";  //s3字符串內容也是helloworld,s1是變量,"world"常量,變量 + 常量的結果在堆中
String s4 = s1 + s2;    //s4字符串內容也是helloworld,s1和s2都是變量,變量 + 變量的結果在堆中

String對象的比較

一、==:比較地址

二、equals(xx):比較字符串內容,嚴格區分大小寫。由於String類型重寫equals

三、equalsIgnoreCase(xx):比較字符串內容,不區分大小寫

四、compareTo(xx):比較字符串的大小,按照字符編碼值比較,嚴格區分大小寫。String類型重寫了Comparable接口的抽象方法,天然排序

五、compareToIgnoreCase(xx):比較字符串的大小,按照字符編碼值比較,不區分大小寫

六、java.text.Collator:文本校對器比較大小,按照指定語言環境的天然語言順序比較大小(字典排序)

空字符的比較

空字符串

  String str1 = "";
  String str2 = new String();
  String str3 = new String("");

判斷某個字符串是不是空字符串

  if("".equals(str))  //推薦

  if(str!=null && str.isEmpty())

  if(str!=null && str.equals(""))

  if(str!=null && str.length()==0)

String類的經常使用API

序號 方法簽名 方法功能簡介
1 String() 建立空字符串
2 String(String original) 根據original建立一個新字符串
3 static String valueOf(xx value) 根據value內容建立一個字符串
4 String intern() 將字符串的內容存入常量池
5 String concat() 字符串拼接
6 boolean equals(Object obj) 判斷當前字符串與指定字符串內容是否已在,嚴格區分大小寫
7 boolean equalsIgnoreCase(String obj) 判斷當前字符串與指定字符串內容是否已在,不區分大小寫
8 int compareTo(String str) 比較當前字符串與指定字符串的大小,嚴格區分大小寫
9 int compareToIgnoreCase(String str) 比較當前字符串與指定字符串的大小,不區分大小寫
10 boolean isEmpty() 判斷當前字符串是否爲空
11 int length() 返回當前字符串的長度
12 String toLowerCase() 將當前字符串轉爲小寫
13 String toUpperCase() 將當前字符串轉爲大寫
14 String trim() 去掉當前字符串先後空白符
15 boolean contains(xx) 判斷當前字符串中是否包含xx
16 int indexOf(xx) 在當前字符串中查找xx第一次出現的下標
17 int lastIndexOf(xx) 在當前字符串中查找xx最後一次出現的下標
18 String substring(int beginIndex) 從當前字符串的[beginIndex, 最後]截取一個子串
19 String substring(int beginIndex, int endIndex) 從當前字符串的[beginIndex, endIndex)截取一個子串
20 char charAt(index) 返回當前字符串[index]位置字符
21 char[] toCharArray() 將當前字符串的內容用一個字符數組返回
22 String(char[] value) 用value字符數組的元素構建一個新字符串
23 String(char[] value,int offset, int count) 用value字符數組的[offset]開始的count個字符構建一個新字符串
24 static String copyValueOf(char[] data) 用data字符數組的元素構建一個新字符串
25 static String copyValueOf(char[] data, int offset, int count) 用data字符數組的[offset]開始的count個字符構建一個新字符串
26 static String valueOf(char[] data) 用data字符數組的元素構建一個新字符串
27 static String valueOf(char[] data, int offset, int count) 用data字符數組的[offset]開始的count個字符構建一個新字符串
28 byte[] getBytes() 將當前字符串按照平臺默認字符編碼方式編碼爲字節序列
29 byte[] getBytes(字符編碼方式) 將當前字符串按照指定字符編碼方式編碼爲字節序列
30 String(byte[] bytes) 將bytes字節序列按照平臺默認字符編碼方式解碼爲字符串
31 String(byte[] bytes,String charsetName) 將bytes字節序列按照指定字符編碼方式解碼爲字符串
32 boolean startsWith(xx) 判斷當前字符串是否以xx開頭
33 boolean endsWith(xx) 判斷當前字符串是否以xx結尾
34 boolean matchs(xx) 判斷當前字符串是否知足xx正則
35 String replace(xx,yy) 將當前字符串中全部xx替換爲yy
36 String replaceFirst(xx,value) 將當前字符串中第一個知足xx正則的字符替換爲value
37 String repalceAll(xx, value) 將當前字符串中全部知足xx正則的字符替換爲value
38 String[] split(xx) 將當前字符串按照xx正則拆分爲多個字符串
39 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 將當前字符串的[srtBegin,srcEnd)部分字符複製到dst字符數組中,dst數組從[dstBegin]開始存儲

StringBuffer和StringBuilder

String類的對象是不可變字符序列,StringBuffer和StringBuilder的對象是可變字符序列。

StringBuffer:老點,線程安全的,由於它的方法有synchronized修飾

StringBuilder:JDK1.5以後引入的,線程不安全,單線程狀況下推薦使用。

經常使用的API,StringBuilder、StringBuffer的API徹底一致

StringBuilder、StringBuffer的API

序號 方法簽名 方法區功能簡介
1 StringBuffer() 建立一個空的可變字符序列,默認長度16
2 StringBuffer(String str) 用字符串str內容建立一個可變字符序列
3 StringBuffer append(數據類型 b) 在當前字符序列後面追加b
4 StringBufferinsert(int index, 數據類型 s) 在當前字符序列[index]插入s
5 StringBuffer delete(int start, int end) 刪除當前字符序列[start,end)部分字符
6 StringBuffer deleteCharAt(int index) 刪除當前字符序列[index]位置字符
7 void setLength(int newLength) 修改當前字符序列的長度爲newLength
8 void setCharAt(int index, char ch) 替換當前字符序列[index]位置字符爲ch
9 StringBuffer reverse() 將當前字符序列內容反轉
10 StringBuffer replace(int start, int end, String str) 替換當前字符序列[start,end)部分字符爲str
11 int indexOf(String str) 在當前字符序列中開始查找str第一次出現的下標
12 int indexOf(String str, int fromIndex) 在當前字符序列[fromIndex]開始查找str第一次出現的下標
13 int lastIndexOf(String str) 在當前字符序列中開始查找str最後一次出現的下標
14 int lastIndexOf(String str, int fromIndex) 在當前字符序列[fromIndex]開始查找str最後一次出現的下標
15 String substring(int start) 截取當前字符序列[start,最後]部分構成一個字符串
16 String substring(int start, int end) 截取當前字符序列[start,end)部分構成一個字符串
17 String toString() 將當前可變字符序列的內容用String字符串形式表示
18 void trimToSize() 若是緩衝區大於保存當前字符序列所需的存儲空間,則將從新調整其大小,以便更好地利用存儲空間。
19 int length() 返回當前字符序列的長度
20 char charAt(int index) 返回當前字符序列[index]位置字符
21 void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 將當前字符串的[srtBegin,srcEnd)部分字符複製到dst字符數組中,dst數組從[dstBegin]開始存儲

 

 正則表達式

字符編碼

ASCII碼
  • 0~31及127(共33個)是控制字符或通訊專用字符(其他爲可顯示字符),如控制符:LF(換行)、CR(回車)、FF(換頁)、DEL(刪除)、BS(退格)

  • 32~126(共95個)是字符(32是空格),其中48~57爲0到9十個阿拉伯數字。

  • 65~90爲26個大寫英文字母,97~122號爲26個小寫英文字母,其他爲一些標點符號、運算符號等。

Unicode

 爲解決一個問題:若是一份文檔中含有不一樣國家的不一樣語言的字符,那麼沒法在一份文檔中顯示全部字符。Unicode字符集涵蓋了目前人類使用的全部字符,併爲每一個字符進行統一編號,分配惟一的字符碼(Code Point)

 UTF-8

 它是一種變長的編碼方式。它可使用1~4個字節表示一個符號。從unicode到uft-8並非直接的對應,而是要過一些算法和規則來轉換(即Uncidoe字符集≠UTF-8編碼方式

 Unicode只是定義了一個龐大的、全球通用的字符集,併爲每一個字符規定了惟一肯定的編號,具體存儲成什麼樣的字節流,取決於字符編碼方案。推薦的Unicode編碼是UTF-16

和UTF-8。

相關文章
相關標籤/搜索