一、字元串運算 String類 1.概述 String是特殊的引用數據類型,它是final類。 2.構造方法 String str = "abc"; 相當於: char date[] = {'a','b','c'}; String str = new String{data}; 3.主要方法 cha ...
一、字元串運算 String類
1.概述
String是特殊的引用數據類型,它是final類。
2.構造方法
String str = "abc";
相當於: char date[] = {'a','b','c'};
String str = new String{data};
3.主要方法
char charAt(int index) 返回char指定索引處的值。
boolean contains(CharSequence s)當且僅當字元串包含指定char值序列返回true
boolean equals(Object anObject) 將次字元串與指定對象進行比較
int indexOf(int ch) 返回指定字元第一次出現的索引值
int length() 返回字元串的長度,多用於迴圈的終止條件
boolean matches(String regex) 判斷一個字元串是否匹配給定的規則表達式
String replace(char oldChar,char newChar) 將串中所有的oldChar替換為newChar
String split(String regex) 將字元串按照規矩進行切分
String subString(int beginIndex) 返回該字元串的beginindex索引之後的字元串
String toLowerCase() 將該字元串中的所有大寫字母變為小寫字母
String toUpperCase() 將該字元串中的所有小寫字母變為大寫字母
String trim() 刪除該字元串所有前導和尾隨的空格並返回
/*類型轉換*/
static String valueOf(boolean b)
返回 boolean參數的字元串 boolean形式。
static String valueOf(char c)
返回 char參數的字元串 char形式。
static String valueOf(char[] data)
返回 char數組參數的字元串 char形式。
static String valueOf(char[] data, int offset, int count)
返回 char數組參數的特定子陣列的字元串 char形式。
static String valueOf(double d)
返回 double參數的字元串 double形式。
static String valueOf(float f)
返回 float參數的字元串 float形式。
static String valueOf(int i)
返回 int參數的字元串 int形式。
static String valueOf(long l)
返回 long參數的字元串 long形式。
static String valueOf(Object obj)
返回 Object參數的字元串 Object形式。
註意:String字元串“==”與equals方法的區別:
如果是通過String str = ""聲明的,==和equals都可是使用;
如果是通過new String ("")聲明的,不能用==,只能用equals。
4.演示案例
需求一:計算一個字元串中大寫字母、小寫字母和數字的個數
思路:將字元串通過for迴圈進行便利,使用charAt方法獲取每一位字元,然後將每一位字元與AscII碼對應的值相對比判斷是大寫字母、小寫字母、數字,計數列印。
/** * @ author: PrincessHug * @ date: 2019/2/7, 17:09 * @ Blog: https://www.cnblogs.com/HelloBigTable/ */ public class StringAPIDemo { /** * 需求:計算字元串中大寫字母、小寫字母、數字出現的次數 * @param args 參數 */ public static void main(String[] args) { //通過用戶輸入得到一個字元串 String str = getString(); getCount(str); } private static void getCount(String str) { int upperNum = 0; int lowerNum = 0; int digit = 0; for (int i = 0;i< str.length();i++){ char c = str.charAt(i); /** * AscII碼數字1-9(48-57),A-Z(65-91),a-z(97-123) */ if (c>=48 && c<=57){ digit++; } if (c>=65 && c<=91){ upperNum++; } if (c>=97 && c<=123){ lowerNum++; } } System.out.println("數字出現的次數為:" + digit); System.out.println("大寫字母出現的次數為:" + upperNum); System.out.println("小寫字母出現的次數為:" + lowerNum); } private static String getString() { System.out.println("請輸入一個字元串:"); Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); return s; } }
需求二:查詢父字元串中某一個子字元串出現的次數
思路1:使用indexOf方法查詢子字元串第一次出現的索引a,再使用subString方法返回父字元串索引(a+子字元串長度)之後的字元串,並計數+1,迴圈該操作知道indexOf方法返回值為-1停止,獲取計數值即可。
思路2:使用split方法將父字元串按照子字元串進行切分得到String數組,使用subString方法獲取父字元串最後的字元串是否等於子字元串,若等於,返回String數組的length長度;若不等,則返回String數組的length-1.
** * @ author: PrincessHug * @ date: 2019/2/7, 17:34 * @ Blog: https://www.cnblogs.com/HelloBigTable/ */ public class FindChildStringCount { /** * 需求:查詢父字元串中某一個子字元串的數量 * @param args */ public static void main(String[] args) { String parent = "itstar123qweritstar()%%dfitstarsdgji"; String child = "itstar"; int num1 = getChildStringCount01(parent, child); int num2 = getChildStringCount02(parent,child); int num3 = getChildStringCount03(parent,child); System.out.println("方法一:" + num1 + "次。"); System.out.println("方法二:" + num2 + "次。"); System.out.println("方法三:" + num3 + "次。"); } private static int getChildStringCount02(String parent, String child) { String[] s = parent.split(child); if (child.equals(parent.substring(parent.length()-child.length()))){ return s.length; }else { return s.length-1; } } private static int getChildStringCount01(String parent,String child) { int num = 0; int index = 0; while ((index = parent.indexOf(child)) != -1){ num++; parent = parent.substring(index + child.length()); } return num; } private static int getChildStringCount03(String parent,String child){ String[] s = parent.split(child); int sum = 0; for (int i = 0;i < s.length;i++){ sum += s[i].length(); } return sum==parent.length()-(s.length-1)*child.length()?s.length-1:s.length; } }
5.String的規則匹配(正則表達式)
正則表達式常用於驗證身份證號、qq號、郵箱等
字元類及含義:
[abc] => abc都可以
[a-zA-Z] => a-z或者A-Z都可以,兩頭都是閉區間
[0-9] => 數字0-9都可以
\d => 與[0-9]一樣
\D => 不能是數字
\w => 表示字母、數字、下劃線都可以,等於[a-zA-Z0-9_]
x? => 表示x出現一次或一次也沒有
x* => 表示x出現了零次或多次
X{n} => 表示x出現了n次
X{n,m} => 表示x出現了n到m次
X+ => 表示x至少出現了一次
^ => 表示正則表達式的開頭
& => 表示正則表達式結尾
需求一:驗證qq號碼是否正確
qq號碼條件:(1)位數為5-15位
(2)開頭數字不能為0
正則表達式為:regex = [1-9]\\d{4-14}
需求二:驗證手機號碼是否正確
手機號條件:(1)位數為11位
(2)第一位為1
(3)第二位為3-9
正則表達式為:regex = [1]][3-9]\\d{9}
需求三:驗證郵箱是否正確
郵箱條件:(1)@之前為郵箱名,字母、數字、下劃線都可以
(2)@符號
(3)@之後為郵箱功能變數名稱(qq.com/163.com.cn)
正則表達式為:regex = \\w+@[a-zA-Z0-9]+(\\.\\w{2,3})+
以下為需求一:驗證qq號碼是否正確,需求二、三隻需將regex修改為對應的正則表達式即可。
/** * @ author: PrincessHug * @ date: 2019/2/7, 21:51 * @ Blog: https://www.cnblogs.com/HelloBigTable/ */ public class MatchQQ { public static void main(String[] args) { while (true) { String qq = getQQ(); if (qq.equals("stop")){ break; }else { matchQQ(qq); } } } /** * @return 返回獲取的qq號 */ private static String getQQ() { Scanner sc = new Scanner(System.in); System.out.println("請輸入您的qq號"); String s = sc.nextLine(); return s; } /** * 驗證qq號是否匹配regex表達式 * @param qq 獲得用戶輸入的qq號 */ private static void matchQQ(String qq) { String regex = qqRegex(); if (qq.matches(regex)) { System.out.println("QQ號正確!"); } else { System.out.println("QQ號錯誤!"); } } /** * @return 返回qq的正則表達式 */ private static String qqRegex() { String regex = "[1-9][0-9]{4,14}"; return regex; } }