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()方法向其尾部追加新的字符串。
以上是對字符串的常見使用,未說到的之後再補充。