文章目錄
- 1.ArrayList
- 1.1 集合的基本使用
- 1.2 集合的創建和成員方法
- 1.3 練習一:集合的遍歷
- 基本數據類型對應的包裝類
- 1.4 練習二:使用集合存儲并遍歷學生對象
- 1.4 練習三:添加用戶對象并判斷是否存在
- 寫方法要思考的步驟
- 1.5 練習四:添加手機對象并返回要求的數據
- 技巧:如果要返回多個數據,可以把這些數據先放進一個容器當中,再把容器返回。如集合,數組。
- 2 綜合練習1:學生管理系統
- **學生類**
- StudentSystem
- 注意點(循環檢驗,查找滿足某條件的對象是否存在)
- 2 綜合練習2:學生管理系統升級版
- User類
- App
- 封裝思想
- 多寫一步可讀性高
- 如何調整字符串中內容
- 其他注意點
本文部分參考本篇文章
1.ArrayList
1.1 集合的基本使用
集合有很多,如下圖所示,本節所介紹的是其中一種:ArrayList
1.2 集合的創建和成員方法
成員方法:可以按照增刪改查去記憶
package ArrayList;import java.util.ArrayList;public class ArrayListDemo1 {public static void main(String[] args) {//1.創建集合的對象//泛型:限定集合中存儲數據的類型。也就是那個<>,需要在類名后面加上<>表示數據類型//ArrayList<String> list = new ArrayList<String>();//JDK7ArrayList<String> list = new ArrayList<>();//此時我們創建的是ArrayList的對象,而ArrayList是java已經寫好的一一個類//這個類在底層做了一些處理//Point! 打印對象不是地址值,而是集合中存儲數據內容//Point! 在展示的時候會拿[]把所有的數據進行包裝,逗號空格作為分隔System.out.println(list);//2.集合的成員方法//2.1添加元素//2.1.1末尾添加boolean result = list.add("A"); //會有返回值,但一般不用管,默認是ture,只需要使用添加功能就行System.out.println(result);System.out.println(list);list.add("A");list.add("B");list.add("C");System.out.println(list);//2.1.2 給定位置插入list.add(1,"A"); //在索引 1 的位置插入 "A“,原來這個位置及后面的元素會向后移動一位。//2.2 刪除元素//2.2.1 根據元素值刪除list.remove("B");//也有boolean返回值,刪除成功返回true,失敗返回false(要刪除的元素不存在)System.out.println(list);boolean result2 = list.remove("D");System.out.println(result2);System.out.println(list);//2.2.2 根據索引刪除//會返回被刪除的元素String str = list.remove(0);System.out.println(str);System.out.println(list);//2.3 修改元素//會返回被覆蓋的元素(原來的舊值)String str1 = list.set(0,"aaa");System.out.println(str1);System.out.println(list);//2.4 查詢元素//2.4.1 根據索引查詢//會返回查詢到的元素String str2 = list.get(0);System.out.println(str2);//2.4.2 獲取集合的長度 + 遍歷for (int i = 0; i < list.size(); i++) { //list.fori即可得到String str3 = list.get(i);System.out.println(str3);}}
}
1.3 練習一:集合的遍歷
定義一個集合,添加字符串,并進行遍歷 遍歷格式參照: [元素1, 元素2,元素3]。
package ArrayList;import java.util.ArrayList;
import java.util.StringJoiner;public class ArrayListTest01 {public static void main(String[] args) {//定義一個集合,添加字符串,并進行遍歷 遍歷格式參照: [元素1,元素2,元素3]。ArrayList<String> list = new ArrayList<>();list.add("A");list.add("B");list.add("C");list.add("D");list.add(1,"E"); //在索引 1 的位置插入 "E“,原來這個位置及后面的元素會向后移動一位。System.out.println(list);//方法一:使用sj(因為有開頭結尾和間隔符進行聯想)StringJoiner sj = new StringJoiner(",","[","]");//list.forEach(sj::add); //簡略版本for (int i = 0; i < list.size(); i++) {sj.add(list.get(i));}System.out.println(sj.toString());System.out.print("["); //注意這里是得是print,不然會換行!!!for (int i = 0; i < list.size(); i++) {if(i==list.size()-1){System.out.print(list.get(i));} else{System.out.print(list.get(i) + ",");}}System.out.println("]");//注意,如果是添加數字,要變成對應包裝類ArrayList<Integer> list2 = new ArrayList<>(); //注意不是int,是Integer//jdk5以后int Integer之間是可以互相轉化的list2.add(1);list2.add(2);list2.add(3);System.out.println(list2);ArrayList<Character> list3 = new ArrayList<>();list3.add('A');list3.add('B');list3.add('C');System.out.println(list3);}
}
基本數據類型對應的包裝類
集合中如果要添加基本數據類型,需要變成其對應的包裝類
1.4 練習二:使用集合存儲并遍歷學生對象
需求:
定義一個集合,添加一些學生對象,并進行遍歷
學生類的屬性為:姓名,年齡。
要求:
對象的數據來自鍵盤錄入
package ArrayList;import java.util.ArrayList;
import java.util.Scanner;public class ArrayListTest02 {public static void main(String[] args) {/*需求:定義一個集合,添加一些學生對象,并進行遍歷學生類的屬性為:姓名,年齡。要求:對象的數據來自鍵盤錄入*///1.創建集合ArrayList<ArrayTest02_Stu> list = new ArrayList<>();////2.創建學生對象//ArrayTest02_Stu s1 = new ArrayTest02_Stu("zhangsan",23);//ArrayTest02_Stu s2 = new ArrayTest02_Stu("lisi",24);//ArrayTest02_Stu s3 = new ArrayTest02_Stu("wangwu",25);//2.鍵盤錄入學生的信息Scanner scanner = new Scanner(System.in);for (int i = 0; i < 2; i++) {System.out.println("輸入名字");//point 每次會創建新的string對象,因此不會是同一個地址//point 如果把創建對象放在外部,那么每次list.add都是同一個地址,會產生輸出的都是最后一次輸入的值的情況String name = scanner.next();System.out.println("輸入年齡");int age = scanner.nextInt();list.add(new ArrayTest02_Stu(name, age));}//3.添加元素//list.add(s1); //point! 注意添加的是這個對象所在的地址,所以每次添加必須得創建多個對象,不然只能把一個對象來回添加多次//list.add(s2);//list.add(s3);//4.遍歷集合for (int i = 0; i < list.size(); i++) {ArrayTest02_Stu stu = list.get(i);//輸出的時候需要get,不然我們自己定義的類沒有特殊處理直接print是地址值//System.out.println(stu);System.out.println(stu.getName() + "," + stu.getAge());}}
}
循環中注意每次放置進列表的都必須是一個新對象
如果把創建對象放在外部,那么每次list.add都是同一個地址,會產生輸出的都是最后一次輸入的值的情況
1.4 練習三:添加用戶對象并判斷是否存在
本題重點就是查找的方法,可以設置boolean返回值,遍歷查找是否相同。
package ArrayList;import java.util.ArrayList;
import java.util.Scanner;public class ArrayListTest03 {public static void main(String[] args) {ArrayList<ArrayTest03_User> list = new ArrayList<>();Scanner sc = new Scanner(System.in);for (int i = 0; i < 3; i++) {System.out.println("輸入第"+(i+1)+"個用戶的id");int id = sc.nextInt();System.out.println("輸入用戶姓名");String name = sc.next();System.out.println("輸入用戶密碼");String password = sc.next();list.add(new ArrayTest03_User(id, name, password));}//輸入查找的idSystem.out.println("請輸入需要查找的id");int sid = sc.nextInt();boolean result = search(list, sid);System.out.println(result);}//寫函數需要考慮的內容//1.這個方法用來干嘛?//2.這個方法需要哪些內容才能完成?//3.調用處是否需要使用方法返回的結果?public static boolean search(ArrayList<ArrayTest03_User> list, int sid){ //point 注意這里要指定類型// point!不能直接查,因為不一定能查到,查不到的話直接報錯,無法返回boolean值!//遍歷比較合適for (int i = 0; i < list.size(); i++) {ArrayTest03_User user = list.get(i);int id = user.getId();if(id == sid){return true;}}return false;}
}
寫方法要思考的步驟
//寫函數需要考慮的內容 //1.這個方法用來干嘛? //2.這個方法需要哪些內容才能完成? //3.調用處是否需要使用方法返回的結果?
1.5 練習四:添加手機對象并返回要求的數據
package ArrayList;import java.util.ArrayList;public class ArrayListTest04 {public static void main(String[] args) {ArrayList<ArrayTest04_Phone> list = new ArrayList<>();ArrayTest04_Phone p1 = new ArrayTest04_Phone("小米",1000);list.add(p1);ArrayTest04_Phone p2 = new ArrayTest04_Phone("蘋果",8000);list.add(p2);ArrayTest04_Phone p3 = new ArrayTest04_Phone("錘子",2000);list.add(p3);ArrayList<ArrayTest04_Phone> result_list = search(list);if (result_list != null) {for (int i = 0; i < result_list.size(); i++) {System.out.println("品牌為"+result_list.get(i).getBrand()+","+"價格為"+result_list.get(i).getPrice());}}else{System.out.println("沒有低于3000的手機");}}//point 技巧://如果要返回多個數據,可以把這些數據先放進一個容器當中,再把容器返回//如集合,數組public static ArrayList<ArrayTest04_Phone> search(ArrayList<ArrayTest04_Phone> list){ArrayList<ArrayTest04_Phone> slist = new ArrayList<>();for (int i = 0; i < list.size(); i++) {if( list.get(i).getPrice() <= 3000 ){slist.add(list.get(i));}}return slist;}
}
技巧:如果要返回多個數據,可以把這些數據先放進一個容器當中,再把容器返回。如集合,數組。
2 綜合練習1:學生管理系統
案例需求
針對目前我們的所學內容,完成一個綜合案例:學生管理系統。
該系統主要功能如下:? 添加學生:通過鍵盤錄入學生信息,添加到集合中
? 刪除學生:通過鍵盤錄入要刪除學生的學號,將該學生對象從集合中刪除
? 修改學生:通過鍵盤錄入要修改學生的學號,將該學生對象其他信息進行修改
? 查看學生:將集合中的學生對象信息進行展示
? 退出系統:結束程序
學生類
package StudentSystem;public class Student {private String id;private String name;private int age;private String address;public Student() {}public Student(String id, String name, int age, String address) {this.id = id;this.name = name;this.age = age;this.address = address;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}
StudentSystem
package StudentSystem;import java.util.ArrayList;
import java.util.Scanner;public class StudentSystem {public static void main(String[] args) {ArrayList<Student> list = new ArrayList<>();Scanner sc = new Scanner(System.in);boolean flag = false;while(!flag) { //可以用loop,flag,exit(0)表示退出System.out.println("------歡迎來到學生管理系統------");System.out.println("1.添加學生");System.out.println("2.刪除學生");System.out.println("3.修改學生");System.out.println("4.查看所有學生");System.out.println("5.退出");System.out.println("請輸入你的選擇:");int choice = sc.nextInt();switch (choice) {case 1 -> addStudent(list); //箭頭是新版,用冒號的話得另外寫breakcase 2 -> deleteStudent(list);case 3 -> updateStudent(list);case 4 -> queryStudent(list);case 5 -> {System.out.println("退出");flag = true;}default -> System.out.println("沒有這個選項");}}}public static void addStudent(ArrayList<Student> list) {System.out.println("進入添加學生板塊");Scanner sc = new Scanner(System.in);System.out.println("請輸入學生id");String id = sc.next();//while (true) { //point 這段整復雜了,還沒考慮到二次檢查// boolean containId = contains(list, id);// if (containId) {// System.out.println("已經存在同樣的ID,請換一個");// } else{// System.out.println("ID有效");// break;// }// System.out.println("請輸入新的id");// id = sc.next(); //point 在循環外部聲明的,不會隨著循環結束消失//}//我的寫法boolean containId = contains(list, id);while (containId) {System.out.println("已經存在同樣的ID,請換一個");System.out.println("請輸入新的id");id = sc.next();containId = contains(list, id);}System.out.println("ID有效");//視頻的寫法是先定義一個null的id,然后在while中輸入,用if判斷,滿足條件可以breakSystem.out.println("請輸入姓名");String name = sc.next();System.out.println("請輸入年齡");int age = sc.nextInt();System.out.println("請輸入地址");String address = sc.next();list.add(new Student(id, name, age, address)); //也可以拆開用setSystem.out.println("學生信息添加成功");}public static void deleteStudent(ArrayList<Student> list) {System.out.println("進入刪除學生板塊");Scanner sc = new Scanner(System.in);System.out.println("請輸入要刪除的id");String id = sc.next();//檢查id是否存在//point 可以直接看gexIndex是否大于0boolean containId = contains(list, id);if (containId) {System.out.println("存在該id");//ArrayList通過ID獲取idx的部分得自己寫int idx = getIndex(list, id);list.remove(idx);System.out.println("刪除成功");}else{System.out.println("不存在該id");return;}}public static void updateStudent(ArrayList<Student> list) {System.out.println("進入修改學生板塊");Scanner sc = new Scanner(System.in);System.out.println("請輸入要修改的id");String id = sc.next();int idx = getIndex(list, id);if (idx != -1) {System.out.println("請輸入要修改的學生姓名");String newName = sc.next();System.out.println("請輸入要修改的學生age");int newAge = sc.nextInt();System.out.println("請輸入要修改的學生地址");String newAddress = sc.next();list.set(idx, new Student(id, newName, newAge, newAddress));System.out.println("修改成功");}else{System.out.println("不存在該id");}}public static void queryStudent(ArrayList<Student> list) {System.out.println("進入查詢學生板塊");if(list.isEmpty()) {System.out.println("無學生信息");return; //注意得有這個}Scanner sc = new Scanner(System.in);System.out.println("請輸入要查詢的學生的id");String id = sc.next();//最好是遍歷,不過如果都是按照順序來的話應該也可以進行一個越界判斷然后輸出for (int i = 0; i < list.size(); i++) {if(id.equals(list.get(i).getId())) {Student querystu = list.get(i);System.out.println("id\t姓名\t年齡\t住址");System.out.println(querystu.getId() + "\t" + querystu.getName() + "\t" + querystu.getAge() + "\t" + querystu.getAddress());return;}}System.out.println("沒有要查詢的學生信息");//return; point 如果是void 不需要最后的return}public static boolean contains(ArrayList<Student> list, String id) {//循環遍歷得到每一個學生對象//拿到學生對象后,獲取id進行判斷for (int i = 0; i < list.size(); i++) {if(list.get(i).getId().equals(id)) {return true;}}return false;}//這塊可以直接調用下面的 getIndex>=0就是true//對應輸入id的索引public static int getIndex(ArrayList<Student> list, String id) {int idx = 0;for (int i = 0; i < list.size(); i++) {Student stu = list.get(i);String stuId = stu.getId();//查詢到的id和要刪除id進行比較if(stuId.equals(id)) {idx = i;return idx;}}return -1; //point必須得在這寫個返回,就-1就行}}
注意點(循環檢驗,查找滿足某條件的對象是否存在)
注意:getIndex可以替代contains,有就是對應索引,沒有就是-1
必須得遍歷結束后再return false,不能for不滿足直接returnfalse
經典結構:while(true){ if(滿足條件)break; else{continue;}} 這樣可以循環,直至滿足條件
也可以用flag,loop,exit(0)終止循環
2 綜合練習2:學生管理系統升級版
加入了登錄,注冊和忘記密碼三個板塊
User類
package StudentSystem;public class User {private String name;private String password;private String personID;private String phoneNumber;public User() {}public User(String name, String password, String personID, String phoneNumber) {this.name = name;this.password = password;this.personID = personID;this.phoneNumber = phoneNumber;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getPersonID() {return personID;}public void setPersonID(String personID) {this.personID = personID;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}
}
App
package StudentSystem;import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class App {public static void main(String[] args) {ArrayList<User> list = new ArrayList<>();Scanner sc = new Scanner(System.in);boolean flag = true;while (flag) {System.out.println("------歡迎來到學生管理系統------");System.out.println("1.登錄");System.out.println("2.注冊");System.out.println("3.忘記密碼");System.out.println("4.退出");System.out.println("請輸入你的選擇:");int choice = sc.nextInt();switch (choice) {case 1 -> logIn(list);case 2 -> register(list);case 3 -> forgetPassword(list);case 4 -> {System.out.println("退出系統,再見");flag = false;//return; //如果程序不是循環運行的,在這return一下就行}default -> System.out.println("沒有這個選項");}}}public static void logIn(ArrayList<User> list){System.out.println("進入登錄板塊");Scanner sc = new Scanner(System.in);for (int i = 0; i < 3; i++ ) {//1.鍵盤錄入用戶名System.out.println("請輸入用戶名");String username = sc.next();//檢測用戶名是否存在boolean check = contains(list, username);if (!check) {System.out.println("用戶名"+username+"不存在,請先注冊");return;}//2.鍵盤錄入密碼System.out.println("請輸入密碼");String password = sc.next();//3.鍵盤錄入驗證碼while (true) {String rightcode = getCode();System.out.println("驗證碼為" + rightcode);System.out.println("請輸入驗證碼");String code = sc.next();if(code.equalsIgnoreCase(rightcode)){ //point 忽略大小寫System.out.println("驗證碼正確");break;}else{System.out.println("驗證碼錯誤");continue;}}//4.驗證用戶名和密碼是否正確//檢測是否在集合中//point 封裝思想的應用//point 把一些零散的數據,封裝成一個對象User userInfo = new User(username,password,null,null);boolean checkcheckUserInfo = checkUserInfo(list,userInfo);if (checkcheckUserInfo) {System.out.println("登錄成功,可以使用");break;}else{System.out.println("登錄失敗,用戶名或者密碼錯誤");if(i == 2){System.out.println("當前賬號"+username+"被鎖定");return;}else{System.out.println("登錄失敗,用戶名或者密碼錯誤,還剩下"+(2-i)+"次機會");}}}}private static boolean checkUserInfo(ArrayList<User> list, User userInfo) {for (int i = 0; i < list.size(); i++) {User user = list.get(i);if(user.getName().equals(userInfo.getName()) && user.getPassword().equals(userInfo.getPassword())){return true;}}return false;}public static void register(ArrayList<User> list){System.out.println("進入注冊板塊");//在外部聲明變量String username= null; //point 初始化避免報錯String password= null;String personID= null;String phoneNumber= null;//添加用戶信息到集合中//1.鍵盤錄入添加用戶名以及判斷限制Scanner sc = new Scanner(System.in);boolean flag = true;while (flag) {System.out.println("請輸入用戶名");username = sc.next();//point 先驗證格式是否正確,再驗證是否唯一//1.1 用戶名長度3-15位之間//1.2 不能是純數字,需要是數字加字母//1.3 用戶名唯一boolean checkUsername = checkUsername(username);//到這里判斷用戶名格式是否正確,接著才能判斷是否唯一if(!checkUsername){System.out.println("格式不正確,請重新輸入");continue; //point 善于使用continue!!}//走到這一步,因為有continue,已經保證了格式正確System.out.println("格式正確,驗證id是否唯一");boolean flag2 = contains(list, username);if(flag2){System.out.println("用戶名重復,請重新輸入");continue;} else{System.out.println("id唯一,用戶名"+username+"可用");flag = false; //或者外層設為true,這里直接break}}System.out.println("用戶名設置成功,請輸入密碼");//鍵盤錄入添加密碼以及判斷限制while (true) {password = sc.next();System.out.println("請再次輸入密碼");String againPassword = sc.next();if(password.equals(againPassword)){System.out.println("兩次密碼一致");break;}else{System.out.println("兩次密碼不一致,請重新輸入密碼");continue;}}System.out.println("密碼設置成功,請輸入身份證號碼");//鍵盤錄入身份證號碼以及判斷限制//長度為18位//不能0開頭//前17位必須是數字//最后一位可以是數字,也可以是大寫X或者小寫xwhile (true) {System.out.println("請輸入身份證號碼");personID = sc.next();boolean flag2 = checkPersonID(personID);if(!flag2){continue;}else{System.out.println("身份證號碼設置成功");break;}}System.out.println("身份證號碼設置成功,請輸入手機號");//鍵盤錄入手機以及判斷限制//長度為11位//不能0開頭//必須是數字while (true) {System.out.println("請輸入手機號");phoneNumber = sc.next();boolean flag3 = checkPhoneNumber(phoneNumber);if(flag3){System.out.println("手機號設置成功");break;}}//把輸入正確的內容放到用戶對象中list.add(new User(username,password,personID,phoneNumber));System.out.println("注冊成功");printList(list);}public static void forgetPassword(ArrayList<User> list){System.out.println("進入忘記密碼板塊");Scanner sc = new Scanner(System.in);//1.鍵盤錄入用戶名System.out.println("請輸入用戶名");String username = sc.next();boolean checkUsername = contains(list,username);if(checkUsername){System.out.println("存在此用戶");}else{System.out.println("用戶名"+username+"不存在,請先注冊");return;}//2.鍵盤錄入身份證和手機號System.out.println("請輸入身份證");String personID = sc.next();System.out.println("請輸入手機號");String phoneNumber = sc.next();//驗證身份證和手機號User checkUser = new User(username,null,personID,phoneNumber);int index = findIndex(list, checkUser.getName());User findUser = list.get(index);if(findUser.getPersonID().equalsIgnoreCase(checkUser.getPersonID()) && //point 可以Ingore,排除掉大小寫X的影響findUser.getPhoneNumber().equals(checkUser.getPhoneNumber())){System.out.println("身份證或手機號驗證正確");}else{System.out.println("身份證和手機號輸入錯誤");return;}//已經驗證了身份證和手機號,可以開始修改密碼String newPassword = null;while (true) {System.out.println("請輸入新密碼");newPassword = sc.next();System.out.println("請再次輸入新密碼");String newPassword2 = sc.next();if(newPassword.equals(newPassword2)){System.out.println("兩次密碼一致,有效");break;}else{System.out.println("兩次密碼不一致,重新輸入");continue;}}//修改密碼list.get(index).setPassword(newPassword); //善于使用get方法System.out.println("密碼修改成功");}private static int findIndex(ArrayList<User> list, String name) {for (int i = 0; i < list.size(); i++) {User user = list.get(i);if (user.getName().equals(name)) {return i;}}return -1;}private static void printList(ArrayList<User> list) {for (int i = 0; i < list.size(); i++) {User user = list.get(i);System.out.println(user.getName()+","+user.getPassword()+","+user.getPersonID()+","+user.getPhoneNumber());}}private static boolean checkPhoneNumber(String phoneNumber) {//長度為11位if(phoneNumber.length() != 11){System.out.println("手機號不是11位,請重新輸入");return false;}//不能0開頭char firstNumber = phoneNumber.charAt(0);if(firstNumber == '0'){System.out.println("手機號不能為0開頭,請重新輸入");return false;}//必須是數字for (int i = 0; i < phoneNumber.length(); i++) {char ch = phoneNumber.charAt(i);if(!(ch >= '0' && ch <= '9')){System.out.println("手機號存在非數字,請重新輸入");return false;}}return true;}private static boolean checkPersonID(String personID) {//長度為18位if(personID.length() != 18){System.out.println("身份證不是18位,請重新輸入");return false;} else{System.out.println("身份證滿足18位,繼續檢驗");}//不能0開頭char firstChar = personID.charAt(0);if(firstChar == '0'){System.out.println("身份證首位為0,請重新輸入");return false;}else{System.out.println("身份證首位滿足不為0,繼續檢驗");}//前17位必須是數字for (int i = 0; i < personID.length() - 1 ; i++) { //前17位,長度-1就行char ch = personID.charAt(i);if(!(ch <= '9' && ch >= '0')){System.out.println("前17位存在非數字,請重新輸入");return false;}}//最后一位可以是數字,也可以是大寫X或者小寫xchar lastChar = personID.charAt(personID.length() - 1);if(!(lastChar <= '9' && lastChar >= '0') || (lastChar == 'X') || (lastChar == 'x')){System.out.println("最后一位輸入有問題,請重新輸入");return false;}else{return true;}}public static boolean checkUsername(String username){//1.1 用戶名長度3-15位之間//if (username.length() < 3 || username.length() > 15) //point 這樣寫調用兩次有點復雜int len = username.length(); //多寫一步可讀性高,調用一次效率提升if(len < 3 || len > 15){return false;}//1.2 不能是純數字,需要是數字加字母//循環遍歷int cnt = 0;for (int i = 0; i < username.length(); i++) {char ch = username.charAt(i);if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {cnt++;break; //有一個字母就不用繼續遍歷了}}//if(cnt == 0){// return false;//}return cnt > 0;}public static boolean contains(ArrayList<User> list, String username){for (int i = 0; i < list.size(); i++) {User u = list.get(i);if (u.getName().equals(username)) {return true;}}//必須得遍歷結束后再return falsereturn false; //list為空默認可以}public static String getCode(){//生成驗證碼//1.創建一個包含所有字母的集合或者stringbuilderArrayList<Character> list = new ArrayList<>();for (int i = 0; i < 26; i++) {list.add((char) ('a' + i));list.add((char) ('A' + i));}//挑選隨機字母//point 可以隨機生成五個,其中一個用數字覆蓋StringBuilder sb = new StringBuilder();Random r = new Random();for (int i = 0; i < 4; i++) {int index = r.nextInt(list.size());sb.append(list.get(index));}//挑選隨機數字int number = r.nextInt(10);sb.append(number); //注意這一步//調整字符串中的內容,可以把字符串先變為一個字符數組,// 然后調整字符數組里面的數據,最后再把字符數組變為字符串char[] arr = sb.toString().toCharArray();int randomIndex = r.nextInt(arr.length);char temp = arr[randomIndex];arr[randomIndex] = arr[arr.length - 1];arr[arr.length - 1] = temp;return new String(arr);}
}
封裝思想
把一些零散的數據,封裝成一個對象,傳入或者傳出,會更加高效
多寫一步可讀性高
if (username.length() < 3 || username.length() > 15) {...}//point 這樣寫調用兩次有點復雜//多寫一步可讀性高,調用一次效率提升
int len = username.length();
if(len < 3 || len > 15){...}
如何調整字符串中內容
1.substring,適用于已知移動到哪里
2.把字符串先變為一個字符數組,然后調整字符數組里面的數據,最后再把字符數組變為字符串
其他注意點
str.equalsIgnoreCase忽略大小寫比較,驗證碼和身份證最后一位都可以用得到
整個方法內都要用到的變量不要在循環里聲明+初始化(只在循環里初始化也會報錯的其實),可以外部聲明,初始化一個空值。