java String、StringBuilder 、正則表示式
String類 字串(引用型別) 修改字串 是重新建立 賦值地址
構造方法
public class StringDemo2 {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello"; 與s2指向同一地址 儲存在堆的常量池中
String s3 = new String("hello"); 建立物件 儲存了s1地址
System.out.println(s1==s2); //true 地址相等
System.out.println(s1==s3); //false
System.out.println(s1.equals(s3));//true 內容相等 重寫了Object的
byte[] bytes={65,66,67,68}; 正數:字母 負數:漢字(兩個位元組)
String str=new String(bytes); // byte陣列 轉 字串
String str=new String(bytes,1,2); //(陣列,始值 個數)
byte[] bytes = str.getBytes(); // 字串 轉
char[] ch={'中','a','2'};
String str=new String(ch); // 字元陣列 轉 字串
String str=new String(ch,0,1); // 字元陣列 轉 字串
char[] chs = str.toCharArray(); //字串 轉 字元陣列
}
}
方法
str.toString() 獲取字串物件的內容 輸出時 自動呼叫
str.isEmpty() 判斷字串是不是空串
str.length() 返回字串長度
str.charAt(0) 返回索引處字元
str.equals(str2); 判斷字串 與 指定字串 內容是否相同
str.equalsIgnoreCase(str3); 判斷字串內容是否相同 忽略大小寫
str.substring(1) 擷取開始索引 到最後 的字串
str.substring(2, 4) 擷取開始索引 到終止索引(不包括) 的字串
str.indexOf("bcd") 返回第一次出現該字串的索引,沒有返回-1
str.contains("bcd") 判斷是否包含指定字串true/false
str.startsWith("Demo") 判斷是否以給定字串開頭
str.endsWith("java") 判斷是否以給定字串結尾
str.toLowerCase() 把字串轉換為小寫字串
str.toUpperCase() 把字串轉換為大寫字串
str.trim() 去掉字串兩端空格
str.replace(oldChar, newChar) 將替換字串中的老字元,為新字元
str.replace(oldstr, newstr) 將字串中的老字串,替換為新字串
String[] strArray = str.split(",") 按照指定符號分割字串
StringBuilder 字串緩衝區(高效) StringBuffer() 用法相同
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(); //構造方法 初始為空串
StringBuilder sb = new StringBuilder("world");//構造方法 str 轉sb
String str = sb.toString(); //str 轉sb 輸出時 自動呼叫
StringBuilder sb2 = sb.append("hello");//新增資料(任意型別)
System.out.println(sb == sb2); //true 地址相同
sb.delete(1, 4); //刪除 [1,4)字元
sb.deleteCharAt(1); //刪除字元
sb.insert(2, "it"); //在指定位置插入
sb.replace(1, 4, "java");//替換[1,4)的字串為"java"
sb.reverse();反轉
sb.length() //返回長度(字元數)
sb.charAt(0) 返回索引處的字元
sb.indexOf("java",5) 查詢第一次出現字串的索引 從指定索引處
String str = sb.substring(0,1); 擷取 [0,1) 返回字串
String str = sb.substring(1); 擷取[1,最後] 返回字串
sb.append("hello").append(true).append(100); //鏈式呼叫
}
}
正則表示式(簡寫為regex Pattern類 是字串)
匹配規則
字元: 字元類:
X 字元 [abc] a或b 或 c
\\ 轉義\ [^abc] 除了 a、b 或 c以外的任何字元
\t 製表符 [a-zA-Z] a 到 z 或 A 到 Z
\n 換行符 [0-9] 0到9數字
\r 回車符 [a-zA-Z_0-9] 字母或數字或下劃線
預定義字元類:
. 點代表的是任何字元 \\. 匹配 點
\d 0到9數字 \D取反 \\d
\w 字母或數字或下劃線 \W取反 \\w
數量詞: 邊界匹配器:
X? X出現0~1次 ^ 行的開頭
X* X出現0~∞次 $ 行的結尾
X+ X出現1~∞次 \b 單詞邊界
X{n} X出現恰好 n 次
X{n,} X出現至少 n 次
X{n,m} X出現 n ~ m 次
regex = "(.)\\1";
點表示任意字元,\\1取第一個括號匹配的內容,加號匹配1次以上
某個字元重複兩次或兩次以上
正則表示式的常用方法
String str = "18369657617";
String regex = "1[34578][0-9]{9}";
boolean flag2 = str.matches(regex); 判斷字串是否匹配
String s = "18-22-40-65";
String regex = "-";
String[] result = s.split(regex); 用分隔符 分割字串 為 字串陣列
String s = "Hello12345World6789012";
String regex = "[0-9]";
String result = s.replaceAll(regex, "*");字串中符合規則的替換為 新字元
字串 數字 轉換
public class Demo03 {
public static void main(String[] args) {
// 字串轉成基本型別Xxx.parseXxx(String s); xxx:基本資料型別
String str="12";
System.out.println(str+1); // 121
int s1=Integer.parseInt(str); // str內容必須是int格式
System.out.println(s1+1); // 13
String str2="2.3";
double s2=Double.parseDouble(str2);
System.out.println(s2+1); // 3.3
//基本型別 轉 字串
String s1=12+""; // 方法1
String s3=String.valueOf(2.3); // 方法2
System.out.println(10+s3); // 102.3
String s4=Integer.toString(12); // 方法3 有引數 不是重寫obj
System.out.println(s4+1); // 13
}
}