1.API
1.1 API概述-幫助文檔的使用
-
什么是API
API (Application Programming Interface) :應用程序編程接口
-
java中的API
如何使用API幫助文檔 :
-
打開幫助文檔
-
找到索引選項卡中的輸入框
-
在輸入框中輸入Random
-
看類在哪個包下
-
看類的描述
-
看構造方法
-
看成員方法
1.2 鍵盤錄入字符串
Scanner類 :
next() : 遇到了空格, 就不再錄入數據了 , 結束標記: 空格, tab鍵
nextLine() : 可以將數據完整的接收過來 , 結束標記: 回車換行符
代碼實現 :
package com.itheima.api;
import java.util.Scanner;
public class Demo1Scanner {
/*
next() : 遇到了空格, 就不再錄入數據了
結束標記: 空格, tab鍵
nextLine() : 可以將數據完整的接收過來
結束標記: 回車換行符
*/
public static void main(String[] args) {
// 1. 創建Scanner對象
Scanner sc = new Scanner(System.in);
System.out.println("請輸入:");
// 2. 調用nextLine方法接收字符串
// ctrl + alt + v : 快速生成方法的返回值
String s = sc.nextLine();
System.out.println(s);
}
}
package com.itheima.api;
import java.util.Scanner;
public class Demo2Scanner {
/*
nextInt和nextLine方法配合使用的時候, nextLine方法就沒有鍵盤錄入的機會了
建議: 今后鍵盤錄入數據的時候, 如果是字符串和整數一起接受, 建議使用next方法接受字符串.
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入整數:");
int num = sc.nextInt(); // 10 + 回車換行
System.out.println("請輸入字符串:");
String s = sc.nextLine();
System.out.println(num);
System.out.println(s);
}
}
2. String類
2.1 String概述
1 String 類在 java.lang 包下,所以使用的時候不需要導包
2 String 類代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被實現為此類的實例也就是說,Java 程序中所有的雙引號字符串,都是 String 類的對象
3 字符串不可變,它們的值在創建后不能被更改
2.2 String類的構造方法
常用的構造方法
示例代碼
package com.itheima.string;
public class Demo2StringConstructor {
/*
String類常見構造方法:
public String() : 創建一個空白字符串對象,不含有任何內容
public String(char[] chs) : 根據字符數組的內容,來創建字符串對象
public String(String original) : 根據傳入的字符串內容,來創建字符串對象
String s = “abc”; 直接賦值的方式創建字符串對象,內容就是abc
注意:
String這個類比較特殊, 打印其對象名的時候, 不會出現內存地址
而是該對象所記錄的真實內容.
面向對象-繼承, Object類
*/
public static void main(String[] args) {
// public String() : 創建一個空白字符串對象,不含有任何內容
String s1 = new String();
System.out.println(s1);
// public String(char[] chs) : 根據字符數組的內容,來創建字符串對象
char[] chs = {'a','b','c'};
String s2 = new String(chs);
System.out.println(s2);
// public String(String original) : 根據傳入的字符串內容,來創建字符串對象
String s3 = new String("123");
System.out.println(s3);
}
}
2.4 創建字符串對象的區別對比
-
通過構造方法創建
通過 new 創建的字符串對象,每一次 new 都會申請一個內存空間,雖然內容相同,但是地址值不同
-
直接賦值方式創建
以“”方式給出的字符串,只要字符序列相同(順序和大小寫),無論在程序代碼中出現幾次,JVM 都只會建立一個 String 對象,並在字符串池中維護
2.5 字符串的比較
2.5.1 字符串的比較
-
== 比較基本數據類型:比較的是具體的值
-
== 比較引用數據類型:比較的是對象地址值
String類 : public boolean equals(String s) 比較兩個字符串內容是否相同、區分大小寫
代碼 :
package com.itheima.stringmethod;
public class Demo1Equals {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "ABC";
String s3 = "abc";
// equals : 比較字符串內容, 區分大小寫
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
// equalsIgnoreCase : 比較字符串內容, 忽略大小寫
System.out.println(s1.equalsIgnoreCase(s2));
}
}
2.6 用戶登錄案例【應用】
案例需求 :
已知用戶名和密碼,請用程序實現模擬用戶登錄。總共給三次機會,登錄之后,給出相應的提示
實現步驟 :
-
已知用戶名和密碼,定義兩個字符串表示即可
-
鍵盤錄入要登錄的用戶名和密碼,用 Scanner 實現
-
拿鍵盤錄入的用戶名、密碼和已知的用戶名、密碼進行比較,給出相應的提示。
-
字符串的內容比較,用equals() 方法實現
-
用循環實現多次機會,這里的次數明確,采用for循環實現,並在登錄成功的時候,使用break結束循
代碼實現 :
package com.itheima.test;
import java.util.Scanner;
public class Test1 {
/*
需求:已知用戶名和密碼,請用程序實現模擬用戶登錄。
總共給三次機會,登錄之后,給出相應的提示
思路:
1. 已知用戶名和密碼,定義兩個字符串表示即可
2. 鍵盤錄入要登錄的用戶名和密碼,用 Scanner 實現
3. 拿鍵盤錄入的用戶名、密碼和已知的用戶名、密碼進行比較,給出相應的提示。
字符串的內容比較,用equals() 方法實現
4. 用循環實現多次機會,這里的次數明確,采用for循環實現,並在登錄成功的時候,使用break結束循環
*/
public static void main(String[] args) {
// 1. 已知用戶名和密碼,定義兩個字符串表示即可
String username = "admin";
String password = "123456";
// 2. 鍵盤錄入要登錄的用戶名和密碼,用 Scanner 實現
Scanner sc = new Scanner(System.in);
// 4. 用循環實現多次機會,這里的次數明確,采用for循環實現
for(int i = 1; i <= 3; i++){
System.out.println("請輸入用戶名:");
String scUsername = sc.nextLine();
System.out.println("請輸入密碼:");
String scPassword = sc.nextLine();
// 3. 拿鍵盤錄入的用戶名、密碼和已知的用戶名、密碼進行比較,給出相應的提示。
if(username.equals(scUsername) && password.equals(scPassword)){
System.out.println("登錄成功");
break;
}else{
if(i == 3){
System.out.println("您的登錄次數已達到今日上限, 請明天再來");
}else{
System.out.println("登錄失敗,您還剩余" + (3-i) +"次機會");
}
}
}
}
}
2.7 遍歷字符串案例【應用】
案例需求 :
鍵盤錄入一個字符串,使用程序實現在控制台遍歷該字符串
實現步驟 :
-
鍵盤錄入一個字符串,用 Scanner 實現
-
遍歷字符串,首先要能夠獲取到字符串中的每一個字符, public char charAt(int index):返回指定索引處的char值,字符串的索引也是從0開始的
-
遍歷字符串,其次要能夠獲取到字符串的長度, public int length():返回此字符串的長度
-
遍歷打印
代碼實現 :
package com.itheima.test;
import java.util.Scanner;
public class Test2 {
/*
需求:鍵盤錄入一個字符串,使用程序實現在控制台遍歷該字符串
思路:
1. 鍵盤錄入一個字符串,用 Scanner 實現
2. 遍歷字符串,首先要能夠獲取到字符串中的每一個字符
public char charAt(int index):返回指定索引處的char值,字符串的索引也是從0開始的
3. 遍歷字符串,其次要能夠獲取到字符串的長度
public int length():返回此字符串的長度
4. 遍歷打印
9
*/
public static void main(String[] args) {
// 1. 鍵盤錄入一個字符串,用 Scanner 實現
Scanner sc = new Scanner(System.in);
System.out.println("請輸入:");
String s = sc.nextLine();
// 2. 遍歷字符串,首先要能夠獲取到字符串中的每一個字符
for(int i = 0; i < s.length(); i++){
// i : 字符串的每一個索引
char c = s.charAt(i);
System.out.println(c);
}
}
}
2.8 統計字符次數案例【應用】
案例需求 :
鍵盤錄入一個字符串,使用程序實現在控制台遍歷該字符串
實現步驟 :
-
鍵盤錄入一個字符串,用 Scanner 實現
-
將字符串拆分為字符數組 , public char[] toCharArray( ):將當前字符串拆分為字符數組並返回
-
遍歷字符數
代碼實現 :
package com.itheima.test;
import java.util.Scanner;
public class Test3 {
/*
需求:鍵盤錄入一個字符串,使用程序實現在控制台遍歷該字符串
思路:
1. 鍵盤錄入一個字符串,用 Scanner 實現
2. 將字符串拆分為字符數組
public char[] toCharArray( ):將當前字符串拆分為字符數組並返回
3. 遍歷字符數組
*/
public static void main(String[] args) {
// 1. 鍵盤錄入一個字符串,用 Scanner 實現
Scanner sc = new Scanner(System.in);
System.out.println("請輸入:");
String s = sc.nextLine();
// 2. 將字符串拆分為字符數組
char[] chars = s.toCharArray();
// 3. 遍歷字符數組
for (int i = 0; i < chars.length; i++) {
System.out.println(chars[i]);
}
}
}
2.9 手機號屏蔽-字符串截取
案例需求 :
以字符串的形式從鍵盤接受一個手機號,將中間四位號碼屏蔽 最終效果為:1561234
實現步驟 :
-
鍵盤錄入一個字符串,用 Scanner 實現
-
截取字符串前三位
-
截取字符串后四位
-
將截取后的兩個字符串,中間加上進行拼接,輸出結果
代碼實現 :
package com.itheima.test;
import java.util.Scanner;
public class Test5 {
/*
需求:以字符串的形式從鍵盤接受一個手機號,將中間四位號碼屏蔽
最終效果為:156****1234
思路:
1. 鍵盤錄入一個字符串,用 Scanner 實現
2. 截取字符串前三位
3. 截取字符串后四位
4. 將截取后的兩個字符串,中間加上****進行拼接,輸出結果
*/
public static void main(String[] args) {
// 1. 鍵盤錄入一個字符串,用 Scanner 實現
Scanner sc = new Scanner(System.in);
System.out.println("請輸入手機號:");
String telString = sc.nextLine();
// 2. 截取字符串前三位
String start = telString.substring(0,3);
// 3. 截取字符串后四位
String end = telString.substring(7);
// 4. 將截取后的兩個字符串,中間加上****進行拼接,輸出結果
System.out.println(start + "****" + end);
}
}
2.10 敏感詞替換-字符串替換
案例需求 :
鍵盤錄入一個 字符串,如果字符串中包含(TMD),則使用***替換
實現步驟 :
-
鍵盤錄入一個字符串,用 Scanner 實現
-
替換敏感詞 String replace(CharSequence target, CharSequence replacement) 將當前字符串中的target內容,使用replacement進行替換,返回新的字符串
-
輸出結果
代碼實現 :
package com.itheima.test;
import java.util.Scanner;
public class Test6 {
/*
需求:鍵盤錄入一個 字符串,如果字符串中包含(TMD),則使用***替換
思路:
1. 鍵盤錄入一個字符串,用 Scanner 實現
2. 替換敏感詞
String replace(CharSequence target, CharSequence replacement)
將當前字符串中的target內容,使用replacement進行替換,返回新的字符串
3. 輸出結果
*/
public static void main(String[] args) {
// 1. 鍵盤錄入一個字符串,用 Scanner 實現
Scanner sc = new Scanner(System.in);
System.out.println("請輸入:");
String s = sc.nextLine();
// 2. 替換敏感詞
String result = s.replace("TMD","***");
// 3. 輸出結果
System.out.println(result);
}
}
2.11 切割字符串
案例需求 :
以字符串的形式從鍵盤錄入學生信息,例如:“張三 , 23”
從該字符串中切割出有效數據,封裝為Student學生對象
實現步驟 :
-
編寫Student類,用於封裝數據
-
鍵盤錄入一個字符串,用 Scanner 實現
-
根據逗號切割字符串,得到(張三)(23)
String[] split(String regex) :根據傳入的字符串作為規則進行切割 將切割后的內容存入字符串數組中,並將字符串數組返回
-
從得到的字符串數組中取出元素內容,通過Student類的有參構造方法封裝為對象
-
調用對象getXxx方法,取出數據並打印。
代碼實現 :
package com.itheima.test;
import com.itheima.domain.Student;
import java.util.Scanner;
public class Test7 {
/*
需求:以字符串的形式從鍵盤錄入學生信息,例如:“張三 , 23”
從該字符串中切割出有效數據,封裝為Student學生對象
思路:
1. 編寫Student類,用於封裝數據
2. 鍵盤錄入一個字符串,用 Scanner 實現
3. 根據逗號切割字符串,得到(張三)(23)
String[] split(String regex) :根據傳入的字符串作為規則進行切割
將切割后的內容存入字符串數組中,並將字符串數組返回
4. 從得到的字符串數組中取出元素內容,通過Student類的有參構造方法封裝為對象
5. 調用對象getXxx方法,取出數據並打印。
*/
public static void main(String[] args) {
// 2. 鍵盤錄入一個字符串,用 Scanner 實現
Scanner sc = new Scanner(System.in);
System.out.println("請輸入學生信息:");
String stuInfo = sc.nextLine();
// stuInfo = "張三,23";
// 3. 根據逗號切割字符串,得到(張三)(23)
String[] sArr = stuInfo.split(",");
// System.out.println(sArr[0]);
// System.out.println(sArr[1]);
// 4. 從得到的字符串數組中取出元素內容,通過Student類的有參構造方法封裝為對象
Student stu = new Student(sArr[0],sArr[1]);
// 5. 調用對象getXxx方法,取出數據並打印。
System.out.println(stu.getName() + "..." + stu.getAge());
}
}
2.12 String方法小結
String類的常用方法 :
public boolean equals(Object anObject) 比較字符串的內容,嚴格區分大小寫
public boolean equalsIgnoreCase(String anotherString) 比較字符串的內容,忽略大小寫
public int length() 返回此字符串的長度
public char charAt(int index) 返回指定索引處的 char 值
public char[] toCharArray() 將字符串拆分為字符數組后返回
public String substring(int beginIndex, int endIndex) 根據開始和結束索引進行截取,得到新的字符串(包含頭,不包含尾)
public String substring(int beginIndex) 從傳入的索引處截取,截取到末尾,得到新的字符串
public String replace(CharSequence target, CharSequence replacement) 使用新值,將字符串中的舊值替換,得到新的字符串
public String[] split(String regex) 根據傳入的規則切割字符串,得到字符串數組
3 StringBuilder類
3.1 StringBuilder類概述
概述 : StringBuilder 是一個可變的字符串類,我們可以把它看成是一個容器,這里的可變指的是 StringBuilder 對象中的內容是可變的
3.2 StringBuilder類和String類的區別
-
String類:內容是不可變的
-
StringBuilder類:內容是可變的
3.3StringBuilder類的構造方法
常用的構造方法
方法名 | 說明 |
---|---|
public StringBuilder() | 創建一個空白可變字符串對象,不含有任何內容 |
public StringBuilder(String str) | 根據字符串的內容,來創建可變字符串對象 |
示例代碼
public class StringBuilderDemo01 {
public static void main(String[] args) {
//public StringBuilder():創建一個空白可變字符串對象,不含有任何內容
StringBuilder sb = new StringBuilder();
System.out.println("sb:" + sb);
System.out.println("sb.length():" + sb.length());
//public StringBuilder(String str):根據字符串的內容,來創建可變字符串對象
StringBuilder sb2 = new StringBuilder("hello");
System.out.println("sb2:" + sb2);
System.out.println("sb2.length():" + sb2.length());
}
}
3.4 StringBuilder常用的成員方法
-
添加和反轉方法
方法名 說明 public StringBuilder append(任意類型) 添加數據,並返回對象本身 public StringBuilder reverse() 返回相反的字符序列 -
示例代碼
public class StringBuilderDemo01 {
public static void main(String[] args) {
//創建對象
StringBuilder sb = new StringBuilder();
//public StringBuilder append(任意類型):添加數據,並返回對象本身
// StringBuilder sb2 = sb.append("hello");
//
// System.out.println("sb:" + sb);
// System.out.println("sb2:" + sb2);
// System.out.println(sb == sb2);
// sb.append("hello");
// sb.append("world");
// sb.append("java");
// sb.append(100);
//鏈式編程
sb.append("hello").append("world").append("java").append(100);
System.out.println("sb:" + sb);
//public StringBuilder reverse():返回相反的字符序列
sb.reverse();
System.out.println("sb:" + sb);
}
}
3.5StringBuilder和String相互轉換【應用】
-
StringBuilder轉換為String
public String toString():通過 toString() 就可以實現把 StringBuilder 轉換為 String
-
String轉換為StringBuilder
public StringBuilder(String s):通過構造方法就可以實現把 String 轉換為 StringBuilder
-
示例代碼
public class StringBuilderDemo02 {
public static void main(String[] args) {
/*
//StringBuilder 轉換為 String
StringBuilder sb = new StringBuilder();
sb.append("hello");
//String s = sb; //這個是錯誤的做法
//public String toString():通過 toString() 就可以實現把 StringBuilder 轉換為 String
String s = sb.toString();
System.out.println(s);
*/
//String 轉換為 StringBuilder
String s = "hello";
//StringBuilder sb = s; //這個是錯誤的做法
//public StringBuilder(String s):通過構造方法就可以實現把 String 轉換為 StringBuilder
StringBuilder sb = new StringBuilder(s);
System.out.println(sb);
}
}
3.6 StringBuilder拼接字符串案例
案例需求 :
定義一個方法,把 int 數組中的數據按照指定的格式拼接成一個字符串返回,調用該方法,
並在控制台輸出結果。例如,數組為int[] arr = {1,2,3}; ,執行方法后的輸出結果為:[1, 2, 3]
實現步驟 :
-
定義一個 int 類型的數組,用靜態初始化完成數組元素的初始化
-
定義一個方法,用於把 int 數組中的數據按照指定格式拼接成一個字符串返回。 返回值類型 String,參數列表 int[] arr
-
在方法中用 StringBuilder 按照要求進行拼接,並把結果轉成 String 返回
-
調用方法,用一個變量接收結果
-
輸出結果
代碼實現 :
/*
思路:
1:定義一個 int 類型的數組,用靜態初始化完成數組元素的初始化
2:定義一個方法,用於把 int 數組中的數據按照指定格式拼接成一個字符串返回。
返回值類型 String,參數列表 int[] arr
3:在方法中用 StringBuilder 按照要求進行拼接,並把結果轉成 String 返回
4:調用方法,用一個變量接收結果
5:輸出結果
*/
public class StringBuilderTest01 {
public static void main(String[] args) {
//定義一個 int 類型的數組,用靜態初始化完成數組元素的初始化
int[] arr = {1, 2, 3};
//調用方法,用一個變量接收結果
String s = arrayToString(arr);
//輸出結果
System.out.println("s:" + s);
}
//定義一個方法,用於把 int 數組中的數據按照指定格式拼接成一個字符串返回
/*
兩個明確:
返回值類型:String
參數:int[] arr
*/
public static String arrayToString(int[] arr) {
//在方法中用 StringBuilder 按照要求進行拼接,並把結果轉成 String 返回
StringBuilder sb = new StringBuilder();
sb.append("[");
for(int i=0; i<arr.length; i++) {
if(i == arr.length-1) {
sb.append(arr[i]);
} else {
sb.append(arr[i]).append(", ");
}
}
sb.append("]");
String s = sb.toString();
return s;
}
}
代碼題
1.訓練案例1
1.1.需求
自定義一個方法,讓用戶輸入一個“QQ號碼”,在方法中判斷這個QQ號碼是否合法。
1.2.要求
1) 號碼長度必須是5—12位數字;
2) 首位不能是0;
1.3.思路提示
可以讓用戶通過鍵盤輸入一個字符串數據,我們自定義的方法中接受字符串數據,然后判斷字符串的長度是否合法,如果合法則遍歷這個字符串,判斷首位是不是1-9之間的字符,然后判斷后面的每一個字符是不是0-9之間的字符,只有都合法的時候才返回true,否則返回false;
代碼實現:
package com.heima.meiri.day8;
import java.util.Scanner;
public class mrb1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入您的QQ:");
String s = sc.nextLine();
boolean b = qqYanzheng(s);//調用驗證方法,並用boolean類型的變量接收
if (b == true) {//根據返回的true和false判斷qq是否驗證成功;
System.out.println("驗證成功!");
} else {
System.out.println("驗證失敗!");
}
}
public static boolean qqYanzheng(String qq) {
if (qq.length() <= 12 && qq.length() >= 5) {//判斷長度
char c = qq.charAt(0);//提取首位字符
if (c >= '0' && c <= '9') {//判斷首字符是否合法
for (int i = 1; i < qq.length(); i++) {
if (qq.charAt(i) > '9' || qq.charAt(i) < '0') {//判斷整體數據字符范圍是否合法
return false;//不合法返回false
}
}
return true;//以上條件都不符合返回true
}
}
return false;//代碼執行到此處肯定結果是false
}
}
運行效果:
2.訓練案例2
2.1.需求
鍵盤輸入兩個字符串,一個長,一個短,求短字符串在長字符串中出現的次數;
2.2.要求
注意特殊情況,例如長字符串的開頭和結尾剛好和短字符串一樣時,你求出來的結果也要是正確的;
舉例:
abc字符串在abcdefgabckbsdffabc字符串中出現了: 3次;
2.3.思路提示
可以利用字符串的replace方法將長字符串中所有的短字符串都替換成長度為0的空字符串,這樣一來長字符串的長度必然會減少,那么減少的量除以短字符串的長度,就是短字符串在長字符串中出現的次數;
代碼實現:
package com.heima.meiri.day8;
import java.util.Scanner;
/*
1.創建鍵盤輸入兩次
2.獲取長數組 長度
3.短數組長度
4.將長數組中的短數組替換為空字符
5.獲取替換后長數組長度
6.原長度減去新長度/短數組長度
*/
public class mrb2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("請輸入被比較的:");
String s1=sc.next();
System.out.println("請輸入比較的:");
String s2=sc.next();
int clength = s1.length();
int dlenght = s2.length();
String replace = s1.replace(s2, "");
int xlength = replace.length();
int count=(clength-xlength)/dlenght;
System.out.println("出現了:"+count+"次");
}
}
運行效果:
單選題
1:下面是關於String類 API 當中與判斷相關的方法,哪一個可以用於忽略大小寫驗證碼的判斷(B)
A: public boolean equals(Object anObject){ ... }
B: public boolean equalsIgnoreCase(String anotherString){ ... }
C: public boolean endsWith(String suffix){ ... }
D: public boolean startsWith(String prefix){ ... }
2:下列能夠正確獲取字符串對象長度的操作是(C ) A: size()
B: length
C: length()
D: charAt()
3:下列方法可以將字符串中所有字母轉換為小寫字母格式的是( B) A: public String toUpperCase() B: public String toLowerCase() C: public String replaceAll(String regex,String replacement) D: public String substring(int start)
4:下列選項中,是StringBuilder的添加方法的是(C ) A: capacity() B: length() C: append() D: reverse()
5:請看代碼,結果是( A)
public static void main(String[] args){
StringBuilder sb = new StringBuilder();
sb.append("d");
sb.append("e");
sb.append("f");
String s = sb.toString().reverse(); //重點關注這一行代碼
System.out.println(s);
}
A: fed B: def C: 編譯報錯 D: 運行報錯
6:下列代碼的運行結果是(C )
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = "ABC";
String s4 = "a";
String s5 = s4 + "bc";
System.out.println(s1.equals(s2));//t
System.out.println(s1.equalsIgnoreCase(s3));//t
System.out.println(s2.equals(s5));//t
System.out.println(s3.equalsIgnoreCase(s5));//t
}
A: true false true true
B: true true false true
C: true true true true
D: true true true false
7:下列代碼的運行結果是(C )
public static void main(String[] args) {
String str1 = "lovejavalove";
String str2 = str1.substring(2, 7);
System.out.println("str2的結果是:"+str2);
}
A: str2的結果是:ejava B: str2的結果是:vejava C: str2的結果是:vejav D: str2的結果是:oveja
8:下列代碼的運行結果是(C )
public static void main(String[] args) {
String str = "ilovejavalovelife";
int index = str.indexOf("love");
//做題注釋:第一次出現位置1
String newStr = str.replace("love","miss");
//做題注釋: 返回一個新的字符串,它是通過用 newChar 替換此字符串中出現的所有 oldChar 得到的。
System.out.println("index的值是:" + index);//1
System.out.println("newStr的值是:" + newStr);
}
A: index的值是:5 newStr的值是:imissjavamisslife B: index的值是:5 newStr的值是:imissjavalovelife C: index的值是:1 newStr的值是:imissjavamisslife D: index的值是:1 newStr的值是:imissjavalovelife
9:下列代碼片段的運行結果是( D)
public static void main(String[] args) {
String str1 = "chengxuyuan@heima";
String str2 = "com-itcast-cn";
String[] strs1 = str1.split("@");
String[] strs2 = str2.split("-");
System.out.println("strs1[1]結果是:" + strs1[1]);//heima
System.out.println("strs2[1]結果是:" + strs2[1]);//itcast
}
A: strs1[1]結果是:chengxuyuan strs2[1]結果是:com B: strs1[1]結果是:chengxuyuan strs2[1]結果是:itcast C: strs1[1]結果是:heima 報異常:ArrayIndexOutOfBoundsException D: strs1[1]結果是:heima strs2[1]結果是:itcast
多選題
10:String和StringBuilder的區別(BC ) A: String是可變的字符序列 B: String是不可變的字符序列 C: StringBuilder是可變的字符序列 D: StringBuilder是不可變的字符序列
代碼題
1.訓練案例1
1.1需求
假如某網站希望使用5個隨機小寫字母作為隨機驗證碼,請自定義一個方法,生成這樣的一個驗證碼並返回;
1.2思路提示
隨機字母不好生成,但是隨機數字是可以的,並且小寫字母的ASCII碼值是97--122范圍之間,因此我們可以生成5個97--122范圍之間的隨機數,然后將這5個隨機數分別轉成字符,連接在一起即可作為驗證碼使用;
1.3效果演示
代碼實現:
package com.heima.meiri.day8;
import java.util.Random;
public class kz1 {
public static void main(String[] args) {
Random r=new Random();
StringBuilder sb=new StringBuilder();
for (int i = 0; i < 5; i++) {
int num_1 = r.nextInt(26)+97;
char cha=(char)num_1;
sb.append(cha);
}
System.out.println("5位小寫字母組成的驗證碼是:"+sb);
}
}
運行效果:
2.訓練案例2(擴展題-五星難度)
選擇性做,如果讀完題沒有思路不建議花費過多的時間和精力。
2.1.需求
自定義一個方法,完成隨機生成一個6位數的驗證碼,驗證碼中可以包含大寫字母,小寫字母和數字,但是必須保證至少有一個數字,且數字的位置是隨機的;
2.2.要求
1:分析自定義方法,是否需要參數,是否需要返回值
2:需要自行查詢StringBuilder類的API學習一兩個必要的方法,完成功能;
2.3.思路提示
本題可以分成2個步驟完成,第一個步驟先生成一個6位數字符串驗證碼,不考慮至少一個數字的問題,第二步再解決至少一個數字的問題;
其中第一個步驟實現思路比較多,其中一種思路是提前准備好所有的合法字符,保存到一個數組中,然后隨機從數組中選擇6個字符出來,組成一個長度為6的字符串驗證碼,這個方式准備數組比較麻煩,但是也能實現;還有一種思路是直接生成6個指定范圍的隨機數字,然后把這6個數字強轉成對應的字符即可;例如,你隨機生成的數字是97--122,那么強轉之后一定是一個小寫字母,同理,可以生成大寫字母和數字字符;
當第一個步驟完成后,可以利用StringBuilder類中的setChar方法,將指定索引位置的字符修改成指定的字符;或再第一步的時候,生成5位數的驗證碼,然后這一步利用StringBuilder類中的insert方法將指定的字符插入到指定索引位置,雖然這兩個方法都可以完成效果,但是需要大家自行查詢API學習使用;
2.4.案例效果
package com.heima.meiri.day8;
import java.util.Random;
import java.util.Scanner;
/*
1.str用來存放隨機數
2.用一個循環去隨機去str字符串里的字符
3.產生隨機數位字符串的長度
*/
public class kz2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請輸入要獲取幾位隨機數:");
int num_1 = sc.nextInt();
String suiji = Suiji(num_1);//傳入鍵盤錄入的數字,輸入幾打印幾位數的驗證
System.out.println("隨機數為:" + suiji);//打印驗證碼
}
public static String Suiji(int num) {//定義方法
Random r = new Random();//創建隨機數對象
StringBuilder sb = new StringBuilder();//創建sb對象
String s = "abcdefghijklmnpqrstuvwxyABCDEFGHIJKLMNPQRSTUVWXYZ";
//因為后米娜插入的必出一個數字,所以隨機字符庫沒必要再有數字
//String s = "abcdefghijklmnpqrstuvwxy0123456789ABCDEFGHIJKLMNPQRSTUVWXYZ";
//將要隨機獲取的數值存入String變量
for (int i = 1; i < num; i++) {
//num為幾就是幾位數的驗證碼
int num_1 = r.nextInt(s.length());
//定義隨機數范圍位為string s的字符長度
sb.append(s.charAt(num_1));
//因為num1具有隨機性,chaAt(索引)為索引位置的字符,將獲取到的字符存入sb
}
int i = r.nextInt(num);//定義隨機索引
int j = r.nextInt(10);//定義隨機數
char f=(char)j;
sb.insert(i, j);//插入0-4隨機索引,插入內容為0-9隨機數字
return sb.toString();
}
}
運行效果:
