1. 程式人生 > >Java語言學習(七):字串的常見使用

Java語言學習(七):字串的常見使用

    Java中字串的使用很是常見,也是不可避免的,比如:格式化、大小寫轉換等等,下面就這些常見的使用來說下字串。

    在使用前,必須要理解一點:字串是不可變的物件,意味著每當呼叫字串物件的方法操作字串時,都將產生一個新的字串物件,而不是更改原來的字串物件。

    (1)任務:理解字串操作

    (2)工作準備:字串物件的方法 toUpperCase()和 toLowerCase()

    (3)程式設計:

public class StringTest {
    public static void main(String[] args) {
        String str = "AbcdEFg";
        //操作前
        System.out.println("操作前字串:"+str);
        //大寫->小寫
        System.out.println("大寫轉小寫後字串:"+str.toLowerCase());
        //小寫->大寫
        System.out.println("小寫轉大寫後字串:"+str.toUpperCase());
        //操作後
        System.out.println("操作後字串:"+str);
    }
}

    (4)執行:輸出操作前後的字串

    通過上面的操作可以看出:字串物件本身並沒有改變。

    字串是由多個字元組成的,靈活的運用字元陣列可以實現複雜的字串操作,使用字串物件的 toCharArray() 方法獲取字元陣列,如:

String str = "AbcdEFg";
char[] charArray = str.toCharArray();
for(char c : charArray){
    System.out.print(c);
}

    字串的格式化操作也是很常用的,如 日期的格式化、貨幣的格式化等,下面以日期格式化操作為例:

//日期格式化
Date date = new Date();
System.out.println("日期原輸出格式:"+date);
System.out.println("日期時間戳輸出格式:"+date.getTime());
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str1 = sf.format(date);
System.out.println("日期格式化輸出格式:"+str1);

    輸出為:

日期原輸出格式:Mon Jul 16 14:42:57 CST 2018
日期時間戳輸出格式:1531723377368
日期格式化輸出格式:2018-07-16 14:42:57

    這裡的SimpleDateFormat類是對日期時間格式化,格式如上所示,當然,也可以格式化成其他日期格式,大家可以自己試一試,這裡關於日期時間的操作不做詳述。

    在之前的部落格中提到過:Java的基本資料型別可以使用 “==” 來判斷是否相等,對於Java類建立的物件使用 “==” 判斷的是兩個物件的記憶體地址,方法equal()可以判斷兩個字串物件的值是否相同。看下面的例項:

String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.println(s1==s2);
System.out.println(s1==s3);

    輸出為:

true
false

    為什麼等式1成立,等式2不成立?

    因為在Java虛擬機器中有一個儲存字串常量的池,會記錄所有字串,提高字串應用效率,而且字串池中不會儲存重複的字串,所以等式1中s1和s2引用的是同一個字串,記憶體地址相同;使用 new 建立的字串會開闢新的記憶體空間,所以等式2中s1和s3引用的不是同一個字串,則記憶體地址不同。

    正則表示式在字串中也是經常用到的,如 E-mail、身份證、手機號碼等。它通常被用於判斷語句中,來檢查某一字串是否滿足某一格式。它是含有一些特殊意義字元的字串,這些特殊字元稱為元字元,大家可以自行百度檢視這些元字元的含義和在表示式中的使用,參考文章:正則表示式手冊。下面通過常見的正則例項來說下:

//正則表示式-固定電話號碼
String phone = "0551-4991032";
String regex = "^(0\\d{2}-\\d{8}(-\\d{1,4})?)|(0\\d{3}-\\d{7,8}(-\\d{1,4})?)$";
if(phone.matches(regex))
   System.out.println(phone+"是合法的電話號碼");
else
   System.out.println(phone+"不是合法的電話號碼");
//正則表示式-手機號碼
String phone1 = "13331234032";
String regex1 = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$";
if(phone1.matches(regex1))
   System.out.println(phone1+"是合法的手機號碼");
else
   System.out.println(phone1+"不是合法的手機號碼");

    Java中提供了Pattern用於正則表示式的編譯表示形式,該類的靜態方法matches()可以執行正則表示式的匹配。正則表示式既可以在java中使用,也可以在js中使用,非常方便、快捷。

    關於字串的操作有很多,像型別轉換、字串擷取、字串替換等,如字串轉換成整數:

String s = "1024";
int _s = Integer.parseInt(s);
System.out.println(_s);

    Integer類是基本型別中int型別的包裝類,可以將基本型別轉換成引用型別。還有其他的包裝類,如:byte的包裝類是Byte,short的包裝類是Short,long的包裝類是Long等,在各個包裝類中,定義了一些常用的域和方法。所有包裝類的物件都不能使用“==”來進行比較,都屬於引用型別,但每個包裝類中都定義了compareTo()方法,可以使用其比較相同型別的物件,根據返回值來確定結果:負數表示小於,0表示等於,正數表示大於。另外,包裝類重寫了從Object類繼承的equals()方法,可以使用其比較兩個引用型別是否相等。

    在字串操作中,有split()方法用於拆分字串,substring()方法用於擷取字串,replace()方法替換字串等等,字串物件為開發者提供了很多方便實用的方法。

    Java是一種強型別語言,當定義變數時,需要先指明型別。對於數字基本型別,其取值範圍是有限制的,如 byte類型範圍為-128~127,在程式設計中要注意避免範圍不對等的問題。

    字串是程式開發中使用最頻繁的資料,在Java中字串是String類的物件,而大量字串操作非常耗時,因此,對於大量的字串操作,應使用StringBuilder字串構建器來完成,它的效率遠遠高於String類,但它對於執行緒來說是不安全的,適用於單任務的字串操作,應用於多執行緒中會涉及非同步訪問的安全性。Java早期版本提供的StringBuffer類可以應用於多執行緒,比StringBuilder稍微慢一些,但差距很小,大家在開發時應靈活運用。

        字串操作中,trim()方法可以去除字串物件前端和後端的所有空格,但字串中間位置的空格則無法處理。下面將使用StringBuilder來便捷、高效的操作字串:

//去掉字串中所有空格
String text = "Java 應用      程式  !!!";
StringBuilder sb = new StringBuilder();
for(int i=0;i<text.length();i++){
   //獲取每個字元並過濾空格
   char c = text.charAt(i);
   if(c == ' ')
      continue;
   //追加非空格的字元到字元構建器中
   sb.append(c);
}
//輸出過濾後的字串
System.out.println(sb);

    輸出為:

Java應用程式!!!

    這裡構建器的append()方法向其尾部追加新的字串。

    以上是對字串的常見使用,未說到的以後再補充。