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

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

    在使用前,必需要理解一點:字符串是不可變的對象,意味着每當調用字符串對象的方法操做字符串時,都將產生一個新的字符串對象,而不是更改原來的字符串對象。前端

    (1)任務:理解字符串操做java

    (2)工做準備:字符串對象的方法 toUpperCase()和 toLowerCase()jquery

    (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() 方法獲取字符數組,如:api

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()方法向其尾部追加新的字符串。

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

相關文章
相關標籤/搜索