day10
今日作業:
題目2
鍵盤輸入任意字符串,打亂里面的內容
訓練目標
隨機數類Random相關API、字符串相關API
訓練提示
1、字符串是不可變的
2、如果要變化需要變成字符數組
3、調整完畢之后再變回字符串
參考答案
import java.util.Random;
import java.util.Scanner;
public class Text12 {
public static void main(String[] args) {
//鍵盤錄入一個字符串
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個字符串");
String strA = sc.next();
char[] arr = strA.toCharArray();
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
int index = r.nextInt(arr.length);
char temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
String str2 = new String(arr);
System.out.println(str2);
}
}
題目3
訓練目標:
生成驗證碼
內容:可以是小寫字母,也可以是大寫字母,還可以是數字
規則:
長度為5
內容中是四位字母,1位數字。
其中數字只有1位,但是可以出現在任意的位置。
參考答案
import java.util.Random;
public class Work {
public static void main(String[] args) {
//創建一個數組用于存儲大小寫字母
char[] arr = new char[52];
for (int i = 0; i < 52; i++) {
if (i <= 25)
arr[i] = (char) (i + 97);
else
arr[i] = (char) (65+i-26);
}
//隨機生成四個字母組成一個字符串
StringBuilder sb = new StringBuilder();
Random rand = new Random();
for (int i = 0; i < 4; i++) {
int index = rand.nextInt(52);
char ch = arr[index];
sb.append(ch);
}
//隨機生成一個數字拼接到字符串
int num = rand.nextInt(9);
sb.append(num);
System.out.println(sb);
//打亂順序
String str = sb.toString();
char[] newArr = str.toCharArray();
for (int i = 0; i < newArr.length; i++) {
int index = rand.nextInt(newArr.length);
char temp = newArr[i];
newArr[i] = newArr[index];
newArr[index] = temp;
}
String result = new String(newArr);
System.out.println(result);
}
}
題目4
請編寫程序,由鍵盤錄入一個字符串,統計字符串中英文字母和數字分別有多少個。比如:Hello12345World中字母:10個,數字:5個。
訓練目標
字符串遍歷
訓練提示
1、鍵盤錄入一個字符串,用 Scanner 實現
2、要統計兩種類型的字符個數,需定義兩個統計變量,初始值都為0
3、遍歷字符串,得到每一個字符
4、判斷該字符屬于哪種類型,然后對應類型的統計變量+1,判斷字母時需要考慮大小寫,條件比較復雜,怎樣做才能使判斷更簡單呢?
訓練步驟
1、創建鍵盤錄入Scanner對象,使用nextLine方法接收輸入的字符串。
2、為方便后續判斷,使用String的toLowerCase方法,將字符串中的字符都轉為小寫。
3、需定義兩個統計變量,初始值都為0
4、遍歷字符串,得到每一個字符
5、判斷該字符屬于哪種類型,然后對應類型的統計變量+1,次數判斷英文字母時只需判斷小寫即可。
參考答案
import java.util.Scanner;
public class Work {
public static void main(String[] args) {
//鍵盤錄入一個字符串
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個字符串");
String str = sc.next();
//轉變為數組
char[] arr = str.toCharArray();
//定義兩個變量分別用來存儲字母個數和數字個數
int letterCount = 0;
int numberCount = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= 'a' && arr[i] <= 'z' || arr[i] >= 'A' && arr[i] <= 'Z') {
letterCount++;
} else if (arr[i] >= '0' && arr[i] <= '9') {
numberCount++;
}
}
System.out.println(str + "中,字母:" + letterCount + "數字:" + numberCount);
}
}
題目5
請定義一個方法用于判斷一個字符串是否是對稱的字符串,并在主方法中測試方法。例如:"abcba"、"上海自來水來自海上"均為對稱字符串。
訓練目標
字符串的反轉功能,判斷是否相等功能
訓練提示
1、判斷是否對稱,方法的返回值是什么類型?參數列表是什么?
2、怎樣判斷對稱呢?如果可以將字符串反轉,反轉后發現跟原來的字符串完全一樣,不就可以判斷出來了嗎,那么哪個類有字符串的反轉功能呢?
訓練步驟
1、定義方法,返回值類型為boolean,參數列表為String類型的一個參數。
2、將字符串轉換為StringBuilder類型,調用StringBuilder的reverse()方法將字符串反轉。
3、將反轉后的字符串再轉回String類型,并與原字符串比較,如果相等,返回true,否則返回false
4、在主方法中,定義一個字符串,調用方法測試結果。
參考答案
import java.util.Scanner;
public class Work {
public static void main(String[] args) {
//鍵盤錄入字符串
Scanner sc = new Scanner(System.in);
System.out.println("請輸入一個字符串");
String str = sc.nextLine();
boolean result = check(str);
System.out.println(result);
}
//定義一個方法用于判斷是否為對稱字符串
public static boolean check(String str) {
//如果傳遞空值返回false
if(str==null){
return false;
}
//轉換為StringBuilder
StringBuilder sb = new StringBuilder(str);
//反轉再轉為字符串
String strA = sb.reverse().toString();
//比較是否與原字符相等
return strA.equals(str);
}
}
題目6
我國的居民身份證號碼,由由十七位數字本體碼和一位數字校驗碼組成。請定義方法判斷用戶輸入的身份證號碼是否合法,并在主方法中調用方法測試結果。規則為:號碼為18位,不能以數字0開頭,前17位只可以是數字,最后一位可以是數字或者大寫字母X。
訓練目標
字符串的遍歷、判斷
訓練提示
1、要判斷字符串是否符合規則,方法的返回值類型是什么?參數列表是什么?
2、使用String的API,對每種不符合條件的情況作出判斷,一旦發現不符合條件就可以結束方法的執行,返回結果了。
3、在主方法中創建鍵盤錄入,調用方法,輸入各種數據測試結果。
訓練步驟
1、定義方法,返回值類型為boolean表示是否合法,參數列表為String類型的id,表示要判斷的數據。
2、對每種不符合條件的情況作出判斷
? 2.1、如果字符串長度不是18,返回false。
? 2.2、如果字符串以數字"0"開頭,返回false。
? 2.3、遍歷字符串,獲取每一位字符,判斷前17位,如果不是數字,返回false,判斷最后一位如果不是數字或者X,返回false
? 2.4、所以的不符合條件都篩選完成,返回true
3、在主方法中創建鍵盤錄入Scanner對象,調用nextLine()方法,獲取用戶輸入,調用方法,傳遞參數,查看結果。要多運行幾次,判斷各種不符合條件的數據。
參考答案
import java.util.Scanner;
public class Work {
public static void main(String[] args) {
//鍵盤錄入身份證號碼
Scanner sc = new Scanner(System.in);
System.out.println("請輸入身份證號碼");
String id = sc.next();
boolean result = checkID(id);
if (result) {
System.out.println("合法");
} else {
System.out.println("不合法");
}
}
//定義一個方法判斷用戶輸入身份證號碼是否合法
public static boolean checkID(String id) {
char[] idArr = id.toCharArray();
if (idArr.length == 0 || idArr[0] == 0 || idArr.length != 18) {
return false;
}
for (int i = 0; i < idArr.length - 1; i++) {
if (idArr[i] < '0' && idArr[i] > '9') {
return false;
}
}
if (idArr[idArr.length - 1] < '0' && idArr[idArr.length - 1] > '9' && idArr[idArr.length - 1] != 'X') {
return false;
}
return true;
}
}
題目7
定義一個方法,把 int 數組中的數據按照指定的格式拼接成一個字符串返回,調用該方法,并在控制臺輸出結果。
要求:
? 1、如果傳遞的參數為空,返回null
? 2、如果傳遞的數組元素個數為0,返回[]
? 3、如果數組為int[] arr = {1,2,3}; ,執行方法后的輸出結果為:[1, 2, 3]
訓練目標
字符串的拼接
訓練提示
1、定義方法的返回值是什么?參數列表是什么?
2、如果不做判斷就對數組進行遍歷,那么如果數組對象為空,會報出異常,怎樣避免空指針異常呢?
3、拼接字符串必然涉及到頻繁改變,該采用可變的字符序列StringBuilder比較好
4、遍歷數組,按照題目格式拼接數組中的元素。
5、將字符串返回
6、在主方法中定義數組,并調用方法,打印結果
訓練步驟
1、定義方法返回值類型:String,參數:int[] arr
2、判斷對象如果為null,直接返回null
3、創建StringBuilder對象
4、遍歷數組,按照要求進行拼接數組元素,如果是不是最后一個元素,還要拼接逗號和空格
5、將StringBuilder轉為String返回
6、在主方法中定義數組,并調用方法,打印結果
參考答案
import java.util.StringJoiner;
public class Work {
public static void main(String[] args) {
//定義一個數組
int[] arr ={1,2,3,4,5};
//調用方法
String str = getString(arr);
System.out.println(str);
}
//定義一個方法把數組中的數據拼接成字符串并返回
public static String getString(int[] arr){
if(arr==null||arr.length==0){
return null;
}
StringJoiner sj = new StringJoiner(", ","[","]");
for(int i=0;i<arr.length;i++){
sj.add(arr[i]+"");
}
return sj.toString();
}
}
題目8(擴展)
在String類的API中,有如下兩個方法:
// 查找參數字符串str在調用方法的字符串中第一次出現的索引,如果不存在,返回-1
public int indexOf(String str)
// 截取字符串,從索引beginIndex(包含)開始到字符串的結尾
public String substring(int beginIndex)
請仔細閱讀API中這兩個方法的解釋,完成如下需求。
現有如下文本:"Java語言是面向對象的,Java語言是健壯的,Java語言是安全的,Java是高性能的,Java語言是跨平臺的"。請編寫程序,統計該文本中"Java"一詞出現的次數。
訓練目標
String類API的靈活使用
訓練提示
1、要找的子串是否存在,如果存在獲取其出現的位置。這個可以使用indexOf完成。
2、如果找到了,那么就記錄出現的位置并在剩余的字符串中繼續查找該子串,而剩余字符串的起始位是出現位置再加上子串的長度。
3、以此類推,通過循環完成查找,如果找不到就是-1,每次找到用計數器記錄次數。
訓練步驟
1、定義方法,返回值int表示次數,參數列表兩個字符串,第一個表示在哪個字符串中查找,第二個表示要查找的目標子串
2、定義統計變量表示次數。
3、定義索引變量,表示每次找到子串出現的索引。
4、定義循環,判斷條件為在字符串中找到了目標子串,使用indexOf實現。
5、如果找到的索引不是-1,在循環中,統計變量累加。
6、把查找過的部分剪切掉,從找到的索引+子串長度的位置開始截取,使用substring實現。
7、將統計變量返回
8、在主方法中,定義字符串表示題目中的文本,定義字符串表示要查找的子串,調用方法,獲取結果。
參考答案
public class Work {
public static void main(String[] args) {
//定義一個字符串
String str = "Java語言是面向對象的,Java語言是健壯的,Java語言是安全的,Java是高性能的,Java語言是跨平臺的";
String str2 = "Java";
int count = search(str, str2);
System.out.println(count);
}
//定義一個方法查找字符串出現的次數
public static int search(String str, String tar) {
// 定義統計變量表示次數
int count = 0;
// 定義索引變量,表示每次找到子串出現的索引
int index = -1;
// 定義循環,判斷條件為在字符串中找到了目標子串
while ((index = str.indexOf(tar)) != -1) { // 將找到的索引賦值給變量并判斷
// 次數累加
count++;
// 把查找過的部分剪切掉,從找到的索引+子串長度的位置開始截取。
str = str.substring(index + tar.length());
}
return count;
}
}
浙公網安備 33010602011771號