字串
在java中,字串被當作String類型的物件處理。 String類別位於java.lang套件中,預設情況下,該套件會自動匯入所有的程式。
建立String物件的方法:
String s1 = "java"; String s2 = new String(); String s3 = new String("Java");
#Java字串的不變性
String物件建立後不能被修改,是不可變的,所謂的修改其實是創造了新的對象,所指向的記憶體空間不同。
如果需要一個可以改變的字串可以使用StringBuffer或StringBuilder。
每次new 一個字串就是產生一個新的對象,即便兩個字符串的內容相同,使用”==” 比較時也為”false” ,如果只需比較內容是否相同,應使用”equals()” 方法。
常數池在Java中是用來保存在編譯期間已確定的、已編譯的class檔案中的資料。
package cn.test;public class Demo12 { public static void main(String[] args) { String s1 = "java";//先检查字符串常量池中是否有"java"字符串,如果有则直接指向,如果没有就在字符串常量池中添加"java"字符串并指向它,所以这种方式创建字符串时最多创建一个对象,或者不创建对象 String s2 = "java";//s2直接指向字符串常量池中的"java" String s3 = new String("java");//在堆内存申请一块内存存储字符串"java",s3指向其内存块对象,同时检查字符串常量池中是否有"java"字符串,如果没有就添加字符串"java"到常量池中,所以new String()有可能创建两个对象 String s4 = new String("java"); System.out.println(s1 == s2); System.out.println(s1 == s3); System.out.println(s3 == s4); s1 = "欢迎来到" + s1; System.out.println(s1); System.out.println(s3.equals(s4)); } }
執行結果:
true
false
false
true
false
String fileName = "HelloWorld.java"; String email = "xiaoli@163.com"; // 判断.java文件名是否正确:合法的文件名应该以.java结尾 int index = fileName.lastIndexOf('.'); String prefix = fileName.substring(index+1); if ( index > 0 && prefix.equals("java")) { System.out.println("Java文件名正确"); } else { System.out.println("Java文件名无效"); } // 判断邮箱格式是否正确:合法的邮箱名中至少要包含"@", 并且"@"是在"."之前 int index2 = email.indexOf('@'); int index3 = email.indexOf('.'); if (index2 != -1 && index3 > index2) { System.out.println("邮箱格式正确"); } else { System.out.println("邮箱格式无效"); } String str = "boo:and:foo"; String[] arr = str.split(":"); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]); }
String str = "boo:and:foo"; String[] arr = str.split(":"); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]); }執行結果: # Java檔案名稱正確
郵箱格式正確
booandfoo
String str = "abcd阿"; byte[] b = str.getBytes(); for (int j = 0; j < b.length; j++) { System.out.print("[" + b[j] + "]"); }運行結果: [97][98][99][100][-80][- 94] 註:1 個位元組等於8 位, gbk 編碼中1 個漢字字元儲存需要2 個字節,1 個英文字元儲存需要1 個位元組 範例3 :
String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd"; // 出现次数int num = 0; // 循环遍历每个字符,判断是否是字符 a ,如果是,累加次数for ( int i = 0;i < s.length(); i++ ) { // 获取每个字符,判断是否是字符a if ( s.charAt(i) == 'a' ) { // 累加统计次数 num++; } } System.out.println("字符a出现的次数:" + num);運行結果: 字元a出現的次數:8
變數,使用StringBuilder或StringBuffer就可以避免這個問題。它們基本上相似,不同之處是StringBuffer是線程安全的,所以性能略高。因此,一般情況下創建一個內容可變的字串對象,優先使用StringBuilder類別。
StringBuilder str2 = new StringBuilder("java");StringBuilder類別的常用方法:
以上是Java之字串詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!