API
String字符串
综合练习:
-
调整字符串:
给定两个字符串A和B,A的旋转操作就是将A最左边的字符移动到最右边。例如,若A=‘abcde’,在移动一次之后就是’bcdea’,如果在若干次调整操作之后,A能变成B,那么就返回True。如果不能匹配成功,则返回false。
/** * 调整字符串: * * 给定两个字符串A和B,A的旋转操作就是将A最左边的字符移动到最右边。 * 例如,若A=‘abcde’,在移动一次之后就是'bcdea', * 如果在若干次调整操作之后,A能变成B,那么就返回True。 * 如果不能匹配成功,则返回false。 */ public class Test02 { public static void main(String[] args) { //1.定义两个字符串 String strA = "abcde"; String strB = "cdeab"; //2.调用方法进行比较 boolean result = check(strA, strB); //3.输出 System.out.println(result); //true } /** * 作用:比较一个字符串是否能由另一个字符串旋转得到 * @param strA 待旋转字符串 * @param strB 待比较字符串 * @return 返回比较结果 */ public static boolean check(String strA,String strB) { for (int i = 0; i < strA.length(); i++) { strA = rotate(strA); if(strA.equals(strB)) { return true; } } //把所有情况都比较完毕,还不一样那么直接返回false return false; } /** * 作用:旋转字符串,把左侧的字符移动到右侧去 * @param str 旋转前的字符串 * @return 旋转后的字符串 */ public static String rotate(String str) { //套路: //如果看到要修改字符串的内容 //有两个办法: //1.用subString进行截取,把左边的字符截取出来拼接到右侧去 //截取思路 //获取最左侧那个字符 //char c = str.charAt(0); //获取剩余的字符 //String end = str.substring(1); //return end + c; //2.可以把字符串先变成一个字符数组,然后调整字符数组里面的数据,最后再把字符数组变成字符串 char[] arr = str.toCharArray(); //拿到0索引上的字符 char first = arr[0]; //把剩余的字符依次往前挪一个位置 for (int i = 0; i < arr.length-1; i++) { arr[i] = arr[i+1]; } arr[arr.length-1] = first; //利用字符数组创建一个字符串对象 String result = new String(arr); return result; } }
-
键盘输入任意字符串,打乱里面的内容
/** *键盘输入任意字符串,打乱里面的内容 */ public class Test03 { public static void main(String[] args) { //1.键盘输入任意的字符串 Scanner sc = new Scanner(System.in); String str = sc.next(); sc.close(); //2.将字符串转换成字符数组 char[] arr = str.toCharArray(); //3.从0索引开始将每一个字符数组元素与随机索引位置的元素进行交换 Random random = new Random(); for (int i = 0; i < arr.length; i++) { int n = random.nextInt(arr.length); char temp = arr[i]; arr[i] = arr[n]; arr[n] = temp; } //4.将字符数组再转回字符串,并打印输出 String result = new String(arr); System.out.println(result); } }
-
生成验证码
内容:可以是小写字母也可以是大写字母,还可以是数字
规则:长度为5,4位字母,1位数字,其中数字可以出现在任意位置
/** * 生成验证码 * 内容:可以是小写字母也可以是大写字母,还可以是数字 * 规则:长度为5,4位字母,1位数字,其中数字可以出现在任意位置 */ public class Test04 { public static void main(String[] args) { //1.将所有的大小写字母都放到一个数组中 //a-z A-Z char[] arr = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; //获取四个字母和1个数字组成的字符数组 char[] arrLast = getFirst(arr); //5.打乱顺序,得到验证码字符串 String result = getResult(arrLast); //6.输出验证码 System.out.println(result); } /** * 作用:获取四个字母和1个数字组成的字符数组 * @param arr 字母数组 * @return 返回四个字母和一个数字组成的字符数组 */ public static char[] getFirst(char[] arr) { //2.从数组中随机获取四次加入StringBuilder对象中 Random random = new Random(); StringBuilder sb = new StringBuilder(""); for (int i = 0; i < 4; i++) { int j = random.nextInt(52); sb.append(arr[j]); } //3.将随机获取的数字拼接到StringBuilder对象后 int num = random.nextInt(10); sb.append(num); //4.将StringBuilder对象转换成字符串再转换成字符数组 char[] arrLast = sb.toString().toCharArray(); return arrLast; } /** * 作用:打乱顺序,得到验证码字符串 * @param arrLast 待打乱的字符数组 * @return 返回打乱后的验证码字符串 */ public static String getResult(char[] arrLast) { Random random = new Random(); for (int i = 0; i < arrLast.length; i++) { int n = random.nextInt(arrLast.length); char temp = arrLast[i]; arrLast[i] = arrLast[n]; arrLast[n] = temp; } String result = new String(arrLast); return result; } }
-
给定两个以字符串形式的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。
不需要考虑乘积过大之后的结果,就认为乘积一定是小于int的最大值
/** * 给定两个以字符串形式的非负整数num1和num2, * 返回num1和num2的乘积,它们的乘积也表示为字符串形式。 * * 不需要考虑乘积过大之后的结果,就认为乘积一定是小于int的最大值 */ public class Test05 { public static void main(String[] args) { String num1 = "104677"; String num2 = "2643"; //1.把num1和num2变成对应的整数 int number1 = getNumber(num1); int number2 = getNumber(num2); //2.两个整数相乘 int number = number1 * number2; //3.将整数变成字符串 StringBuilder sb = new StringBuilder(""); System.out.println(sb.append(number).toString()); } /** * 把字符串变成对应的整数 * @param num * @return */ public static int getNumber(String num) { char[] arrNum = num.toCharArray(); int number = 0; for (int i = 0; i < arrNum.length; i++) { number = number*10 + (arrNum[i] - 48); } return number; } }
-
给一个字符串s,由若干单词组成,单词前后用一些空格字符隔开,返回字符串最后一个单词的长度。单词是指仅由字母组成,不包含任何空格字符的最大子字符串。
示例1:输入:s = “Hello World” 输出:5
解释:最后一个单词是"World",长度为5
示例2:输入:s = " fly me to the moon" 输出:4
解释:最后一个单词是"moon",长度为4
示例3:输入:s = “luffy is still joyboy” 输出:6
解释:最后一个单词是"joyboy",长度为6
/** * 给一个字符串s,由若干单词组成,单词前后用一些空格字符隔开, * 返回字符串最后一个单词的长度。单词是指仅由字母组成, * 不包含任何空格字符的最大子字符串。 * 示例1:输入:s = "Hello World" 输出:5 * 解释:最后一个单词是"World",长度为5 * 示例2:输入:s = " fly me to the moon" 输出:4 * 解释:最后一个单词是"moon",长度为4 * 示例3:输入:s = "luffy is still joyboy" 输出:6 * 解释:最后一个单词是"joyboy",长度为6 */ public class Test06 { public static void main(String[] args) { //1.键盘录入一个字符串 Scanner sc = new Scanner(System.in); String str = sc.nextLine(); sc.close(); //2.获取最后一个单词的长度 int endLen = getEndLen(str); //3.打印输出 System.out.println(endLen); } /** * 作用:获取最后一个单词的长度 * @param str * @return */ public static int getEndLen(String str) { for (int i = str.length()-1; i >= 0; i--) { if((str.charAt(i) < 'a' || str.charAt(i) > 'z') && (str.charAt(i) < 'A' || str.charAt(i) > 'Z')) { return str.length()-i-1; } } return str.length(); } }
集合
-
为什么要有集合?
存储时可以自动扩容。
- 集合和数组的对比
- 长度:数组长度固定,集合长度可变
- 存储类型:数组可以存基本数据类型和引用数据类型,而集合可以存引用数据类型,如果想要存基本数据类型需要将其变成对应的包装类才行。
- 集合和数组的对比
-
集合
-
ArrayList
public class ArrayListDemo01 { public static void main(String[] args) { //1.创建集合的对象 //泛型:限定集合中存储数据的类型 //JDK7之前: //ArrayList<String> list = new ArrayList<String>(); //JDK7之后: //此时创建的是ArrayList的对象,而ArrayList是java已经写好的一个类 //这个类在底层做了一些处理 //打印对象不是地址值,而是集合中存储的数据内容 //在展示的时候会拿[]把所有的数据进行包裹 ArrayList<String> list = new ArrayList<>(); System.out.println(list);//[] } }
ArrayList成员方法:
-
增——boolean add(E e):添加元素,返回值表示是否添加成功
-
删——
boolean remove(E e):删除指定元素,返回值表示是否删除成功
E remove(int index):删除指定索引的元素,返回被删除元素
-
改——E set(int index,E e):修改指定索引下的元素,返回原来的元素
-
查——
E get(int index):获取指定索引的元素
int size():集合的长度,也就是集合中元素的个数
/* boolean add(E e) 添加 boolean remove(E e) 删除 E remove(int index) E set(int index,E e) 修改 E get(int index) 查询 int size() 获取长度 */ public class ArrayListDemo02 { public static void main(String[] args) { //1.创建一个集合 ArrayList<String> list = new ArrayList<>(); //2.添加元素(不管添加什么,都会添加成功,一般直接省略返回值) //boolean result = list.add("aaa"); list.add("aaa"); //System.out.println(result); list.add("bbb"); list.add("ccc"); list.add("ddd"); System.out.println(list);//[aaa,bbb,ccc,ddd] //3.删除元素 boolean result = list.remove("aaa"); System.out.println(result);//true System.out.println(list);//[bbb,ccc,ddd] String str = list.remove(0); System.out.println(str);//bbb //4.修改元素 String result1 = list.set(1, "eee"); System.out.println(result1);//ddd System.out.println(list);//[ccc,eee] //5.查询元素 String s = list.get(0); System.out.println(s);//ccc System.out.println(list);//[ccc,eee] int size = list.size(); System.out.println(size);//2 } }
-
-
-
综合练习
-
集合的遍历方式
需求:定义一个集合,添加字符串,并进行遍历
遍历格式参照:[元素1,元素2,元素3]
public class Test01 { public static void main(String[] args) { //1.创建集合 ArrayList<String> list = new ArrayList<>(); //2.添加元素 list.add("欲买桂花"); list.add("同载酒,"); list.add("终不似,"); list.add("少年游。"); //3.遍历 System.out.print("["); for (int i = 0; i < list.size(); i++) { if(i == list.size() - 1) { System.out.println(list.get(i) + "]"); }else { System.out.print(list.get(i)); } } } }
-
添加数字并遍历
需求:定义一个集合,添加数字,并进行遍历
遍历格式参照:[元素,元素2,元素3]
基本数据类型对应的包装类:
byte Byte short Short char Character int Integer long Long float Float double Double boolean Boolean public class Test02 { public static void main(String[] args) { //1.创建集合 ArrayList<Integer> list = new ArrayList<>(); //2.添加元素 //JDK5以后,int Integer之间是可以相互转化的 list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); //3.遍历 System.out.print("["); for (int i = 0; i < list.size(); i++) { if(i == list.size() - 1) { System.out.println(list.get(i) + "]"); }else { System.out.print(list.get(i)+","); } } } }
-
添加学生对象并遍历
需求:定义一个集合,添加一些学生对象,并进行遍历
学生类的属性为:姓名,年龄
要求:对象的数据来自键盘录入
public class Test03 { public static void main(String[] args) { //1.创建集合 ArrayList<Student> list = new ArrayList<>(); //2.创建学生对象 //Student s1 = new Student("Jin", 28); //Student s2 = new Student("Jimin", 26); //Student s3 = new Student("Suga", 27); //2.键盘录入学生的信息并添加到集合当中 Scanner sc = new Scanner(System.in); for (int i = 0; i < 3; i++) { Student s = new Student(); System.out.println("请输入学生的姓名:"); String name = sc.next(); System.out.println("请输入学生的年龄:"); int age = sc.nextInt(); //把name和age赋值给学生对象 s.setName(name); s.setAge(age); //把学生对象添加到集合中 list.add(s); } //3.添加元素 //list.add(s1); //list.add(s2); //list.add(s3); //4.遍历集合 for (int i = 0; i < list.size(); i++) { //i 索引 list.get(i) 元素/学生对象 Student stu = list.get(i); System.out.println(stu.getName()+", "+stu.getAge()); } sc.close(); } }
-
添加用户对象并判断是否存在
需求:
- main方法中定义一个集合,存入三个用户对象。用户属性为id、username、password
- 定义一个方法,根据id查找对应的用户信息。如果存在,返回true,如果不存在,返回false
/** * 添加用户对象并判断是否存在 * 需求: * main方法中定义一个集合,存入三个用户对象。 * 用户属性为id、username、password * 定义一个方法,根据id查找对应的用户信息。 * 如果存在,返回true,如果不存在,返回false */ public class Test04 { public static void main(String[] args) { //1.创建集合 ArrayList<User> list = new ArrayList<>(); //2.创建三个用户对象 User u1 = new User("bts001","Jin","123456"); User u2 = new User("bts002","Jimin","125356"); User u3 = new User("bts003","Suga","133756"); //3.把用户对象添加到集合中 list.add(u1); list.add(u2); list.add(u3); //4.调用方法查看id是否存在 boolean result = contains(list,"bts007"); //5.打印结果 System.out.println(result); } public static boolean contains(ArrayList<User> list,String id) { for (int i = 0; i < list.size(); i++) { if(list.get(i).getId().equals(id)) { return true; } } return false; } }
-
添加手机对象并返回要求的数据
需求:
- 定义Javabean类:Phone
- Phone属性:品牌,价格
- main方法中定义一个集合,存入三个手机对象。
- 分别为:小米,1000。苹果,8000。锤子,2999
- 定义一个方法,将价格低于3000的手机信息返回
/** * 添加手机对象并返回要求的数据 * 需求: * - 定义Javabean类:Phone * - Phone属性:品牌,价格 * - main方法中定义一个集合,存入三个手机对象。 * - 分别为:小米,1000。苹果,8000。锤子,2999 * - 定义一个方法,将价格低于3000的手机信息返回 */ public class Test05 { public static void main(String[] args) { //1.创建集合对象 ArrayList<Phone> list = new ArrayList<>(); //2.创建手机对象 Phone p1 = new Phone("小米",1000); Phone p2 = new Phone("苹果",8000); Phone p3 = new Phone("锤子",2999); //3.添加数据 list.add(p1); list.add(p2); list.add(p3); //4.调用方法 ArrayList<Phone> phoneInfoList = getPhoneInfo(list); //5.遍历集合 for (int i = 0; i < phoneInfoList.size(); i++) { Phone phone = phoneInfoList.get(i); System.out.println(phone.getBrand()+","+phone.getPrice()); } } //技巧: //如果以后要返回多个数据,可以把这些数据先放到一个容器当中,再把容器返回 //集合 数组 public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list) { //定义一个集合用于存储价格低于3000的手机对象 ArrayList<Phone> resultList = new ArrayList<>(); //遍历集合 for (int i = 0; i < list.size(); i++) { Phone p = list.get(i); int price = p.getPrice(); //当价格低于3000,就把手机对象添加到resultList中 if(price < 3000) { resultList.add(p); } } return resultList; } }
-
说明:
以上笔记学习是学习b站黑马程序员时记下的笔记,仅限于帮助理解学习,不做任何其他商业用途。