1. 程式人生 > 實用技巧 >002.Java字串操作

002.Java字串操作

原始資料來源:http://c.biancheng.net/view/5820.html

001.字串與整型int的轉換

String 字串轉整型 int 有以下兩種方式:

  • Integer.parseInt(str)
  • Integer.valueOf(str).intValue()

整型 int 轉 String 字串型別有以下 3 種方法:

  • String s = String.valueOf(i);
  • String s = Integer.toString(i);
  • String s = "" + i;

002.字串的連線:

  • 使用連線運算子 + : 這種方法使用得最多,個人感覺也最方便;可以連線任意型別的資料;
  • 使用 concat() 方法;一次呼叫只能連線一個字串,但好在可以連線呼叫. 如:
    String info="三國".concat("x").concat("y");

003.字串其它小函式: String str

  • 取字串長度: str.length();
  • 大小寫轉換: str.toLowerCase(); str.toUpperCase();
  • 字串前後空格清理: str.trim();
  • 字串替換:
    • replace(String oldChar, String newChar)將目標字串中的指定字元(串)替換成新的字元(串)
      str.replace((char) 12288, ' '); 將中文空格替換成英文空格;12288 是中文全形空格的 unicode 編碼。
    • .replaceFirst(String regex, String replacement)用於將目標字串中匹配某正則表示式的第一個子字串替換成新的字串
    • replaceAll(String regex, String replacement)將目標字串中匹配某正則表示式的所有子字串替換成新的字串
  • 字串的擷取:str.substring(int beginIndex,int endIndex)
    --> 該方法用於提取位置 beginIndex 和位置 endIndex 位置之間的字串部分。
    --> 包含 beginIndex, 不包含 endIndex;
    --> 字串首字元索引為: 0;
  • 字串的分割: str.split(String sign,int limit)
    • str 為需要分割的目標字串。
    • sign 為指定的分割符,可以是任意字串。
    • limit 表示分割後生成的字串的限制個數,如果不指定,則表示不限制,直到將整個目標字串完全分割為止。
      (前面 limit-1 個元素是正常分割的,其餘部分全部做為最後一個元素,不做分割)
    • 使用分隔符注意如下:
      1)“.”和“|”都是轉義字元,必須得加“\\”。
      • 如果用“.”作為分隔的話,必須寫成String.split("\\."),這樣才能正確的分隔開,不能用String.split(".")
      • 如果用“|”作為分隔的話,必須寫成String.split("\\|"),這樣才能正確的分隔開,不能用String.split("|")
      2)如果在一個字串中有多個分隔符,可以用“|”作為連字元,比如:“acount=? and uu =? or n=?”,把三個都分隔出來,可以用String.split("and|or")
  • 字串比較
    --> str1.equals(str2);逐個地比較兩個字串的每個字元是否相同。如果兩個字串具有相同的字元和長度,返回 true,否則返回 false。區分大小寫
    注意 == 比較的不同:
    equals比較的是字元,只要字元一樣就OK; 湖南張三。湖北張三: 只要名字一樣就OK,
    == 比較的是不是同一個例項物件; 湖南張三,湖北張三:不一樣,雖然名字一樣,但不是同一人;只有在同一個人的時候才OK
    -->equalsIgnoreCase() 方法的作用和語法與 equals() 方法完全相同,唯一不同的是equalsIgnoreCase() 比較時不區分大小寫
    -->compareTo() 方法用於按字典順序比較兩個字串的大小,該比較是基於字串各個字元的 Unicode 值
    str.compareTo(String otherstr); str小: 返回負數; str大:返回正數; str與otherstr一樣大:返回0
  • 字元查詢
    --> str.indexOf(value,int fromIndex) :返回字元(串)在指定字串中首次出現的索引位置,如果能找到,則返回索引值,否則返回 -1
    str 表示指定字串;value 表示待查詢的字元(串);fromIndex 表示查詢時的起始索引,如果不指定 fromIndex,則預設從指定字串中的開始位置查詢(索引位:0)。
    --> str.lastlndexOf(value, int fromIndex): 返回字元(串)在指定字串中最後一次出現的索引位置,如果能找到則返回索引值,否則返回 -1
    注意:lastIndexOf() 方法的查詢策略是從右往左查詢,如果不指定起始索引,則預設從字串的末尾開始查詢。如果指定了索引,則從索引位往前查詢;
    --> 字串名.charAt(索引值) :在字串內根據指定的索引查詢字元

004.注意空字串和NULL

null: 表示物件未被例項化;
字字串:物件已例項化,只不過內容是空而已

005. StringBuffer類

--> StringBuffer 類提供了 3 個構造方法來建立一個字串,如下所示:

  • StringBuffer() 構造一個空的字串緩衝區,並且初始化為 16 個字元的容量
  • StringBuffer(int length) 建立一個空的字串緩衝區,並且初始化為指定長度 length 的容量
  • StringBuffer(String str) 建立一個字串緩衝區,並將其內容初始化為指定的字串內容 str,字串緩衝區的初始容量為 16 加上字串 str 的長度

--> StringBuffer 物件.append(String str) :追加內容到當前 StringBuffer 物件的末尾,類似於字串的連線。呼叫該方法以後,StringBuffer 物件的內容也發生了改變,

-->StringBuffer 物件.setCharAt(int index, char ch);字串的指定索引位置替換一個字元;修改物件中索引值為 index 位置的字元為新的字元 ch

-->StringBuffer 物件.reverse();將字串序列用其反轉的形式取代;

-->StringBuffer 物件.deleteCharAt(int index);移除序列中指定位置的字元; 刪除指定位置的字元,然後將剩餘的內容形成一個新的字串

StringBuffer 物件.delete(int start,int end);移除序列中子字串的字元;
start 表示要刪除字元的起始索引值(包括索引值所對應的字元),end 表示要刪除字串的結束索引值(不包括索引值所對應的字元)。

006. String, StringBuffer, StringBuilder 類的區別

String 是 Java 中基礎且重要的類,被宣告為 final class,是不可變字串。因為它的不可變性,所以拼接字串時候會產生很多無用的中間物件,如果頻繁的進行這樣的操作對效能有所影響。StringBuffer 就是為了解決大量拼接字串時產生很多中間物件問題而提供的一個類。它提供了 append 和 add 方法,可以將字串新增到已有序列的末尾或指定位置,它的本質是一個執行緒安全的可修改的字元序列。在很多情況下我們的字串拼接操作不需要執行緒安全,所以 StringBuilder 登場了。StringBuilder 是 JDK1.5 釋出的,它和 StringBuffer 本質上沒什麼區別,就是去掉了保證執行緒安全的那部分,減少了開銷。

007. 正則表示式

-->String 類裡也提供瞭如下幾個特殊的方法。

  • boolean matches(String regex):判斷該字串是否匹配指定的正則表示式。
  • String replaceAll(String regex, String replacement):將該字串中所有匹配 regex 的子串替換成 replacement。
  • String replaceFirst(String regex, String replacement):將該字串中第一個匹配 regex 的子串替換成 replacement。
  • String[] split(String regex):以 regex 作為分隔符,把該字串分割成多個子串。

-->Java 還提供了 Pattern 和 Matcher 兩個類專門用於提供正則表示式支援。

關於預定義字元的記憶:

  • d 是 digit 的意思,代表數字。
  • s 是 space 的意思,代表空白。
  • w 是 word 的意思,代表單詞。
  • d、s、w 的大寫形式恰好匹配與之相反的字元

正則表示式還提供了數量識別符號,正則表示式支援的數量識別符號有如下幾種模式。

  • Greedy(貪婪模式):數量表示符預設採用貪婪模式,除非另有表示。貪婪模式的表示式會一直匹配下去,直到無法匹配為止。如果你發現表示式匹配的結果與預期的不符,很有可能是因為你以為表示式只會匹配前面幾個字元,而實際上它是貪婪模式,所以會一直匹配下去。
  • Reluctant(勉強模式):用問號字尾(?)表示,它只會匹配最少的字元。也稱為最小匹配模式。
  • Possessive(佔有模式):用加號字尾(+)表示,目前只有 Java 支援佔有模式,通常比較少用。

關於正則的類庫包 java.util.regex的使用,可以參考:http://c.biancheng.net/view/5814.html