【Java学习笔记】

API

String字符串

综合练习:

  1. 调整字符串:

    给定两个字符串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;
        }
    
    }
    
  2. 键盘输入任意字符串,打乱里面的内容

    /**
     *键盘输入任意字符串,打乱里面的内容
     */
    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);
        }
    }
    
  3. 生成验证码

    内容:可以是小写字母也可以是大写字母,还可以是数字

    规则:长度为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;
        }
    }
    
  4. 给定两个以字符串形式的非负整数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;
        }
    }
    
  5. 给一个字符串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();
        }
    }
    

集合

  1. 为什么要有集合?

    存储时可以自动扩容。

    • 集合和数组的对比
      • 长度:数组长度固定,集合长度可变
      • 存储类型:数组可以存基本数据类型和引用数据类型,而集合可以存引用数据类型,如果想要存基本数据类型需要将其变成对应的包装类才行。
  2. 集合

    • 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
          }
      }
      
  3. 综合练习

    • 集合的遍历方式

      需求:定义一个集合,添加字符串,并进行遍历

      遍历格式参照:[元素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]

      基本数据类型对应的包装类:

      byteByte
      shortShort
      charCharacter
      intInteger
      longLong
      floatFloat
      doubleDouble
      booleanBoolean
      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站黑马程序员时记下的笔记,仅限于帮助理解学习,不做任何其他商业用途。

黑马程序员

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值