自学Java(day7),String类和ArrayList集合

本文是自学Java第七天的学习笔记,重点介绍了String类的基本概念、不可变性,以及常用的字符串操作,如内容比较、遍历、替换等。此外,还详细讲解了ArrayList集合的使用,包括泛型支持、常用API,并通过实例展示了ArrayList在实际场景中的应用,如数据搜索和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自学Java(day7)

一.String类概述

  • java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。

  • Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。

  • String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。

  • 字符串对象在字符串常量池中存储,以""方式给出的字符串对象。

  1. String是什么,可以做什么?
  • 字符串类型,可以定义字符串变量指向字符串对象。

    2.String是不可变字符串的原因?

  • String变量每次的修改其实都是产生并指向了新的字符串对象。

  • 原来的字符串对象都是没有改变的,所以称不可变字符串。

二.String类的常用API-字符串内容比较

1.字符串的内容比较
  • 字符串的内容比较不适合用"=="比较。
方法名说明
public boolean equals (Object anObject)将此字符串与指定对象进行比较。只关心字符内容是否一致!
public boolean equalsIgnoreCase (String anotherString)将此字符串与指定对象进行比较,忽略大小写比较字符串。只关心字符内容是否一致!
  • 只关心内容是否一样就使用String提供的equals方法
  • 基本数据类型比较是一般使用“==”。
2.案例
public class StringEqualsDemo {
    public static void main(String[] args) {
        //1.正确登陆名和密码
        String okName = "张飞";
        String okPassword = "123456";

        //2.输入登陆名称和密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入登陆名:");
        String name = sc.next();
        System.out.println("请输入密码:");
        String password = sc.next();

        //3.判断用户输入的登陆名称和密码是否正确
        if(okName.equals(name) && okPassword.equals(password)){
            System.out.println("登陆成功!欢迎您回来哟");
        }else {
            System.out.println("你输入的登录名或者密码有误!请重新输入哦");
        }
        
        //4.忽略内容大小写比较内容的api;一般用于比较验证码这样的逻辑业务
        String code1 = "1WeQr2";
        String code2 = "1wEqR2";
        System.out.println(code1.equals(code2));//flase
        System.out.println(code1.equalsIgnoreCase(code2));//ture
    }
}

三.String类常用API-遍历、替换、截取、分割操作

方法名说明
public int length()返回此字符串的长度
public char charAt(int index)获取某个索引位置处的字符
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)根据传入的规则切割字符串,得到字符串数组返回
public class StringAPIOtherDemo {
    public static void main(String[] args) {

        // 1.    public int length()                                         返回此字符串的长度
        String s = "突然好想你,五月天";
        System.out.println(s.length());
        // 2.    public char charAt(int index)                               获取某个索引位置处的字符
        char a = s.charAt(4);
        System.out.println(a);

        System.out.println("-------------遍历字符串的中的每个字符----------");
        for (int i = 0; i < s.length(); i++) {
            System.out.print(s.charAt(i));
        }
        System.out.println();
        // 3.    public char[] toCharArray():                               将当前字符串转换成字符数组返回
        char[] chars = s.toCharArray();
        for (int i = 0; i < s.length(); i++) {
            char ch = chars[i];
            System.out.print(ch+"\t");
        }

        System.out.println();
        // 4.    public String substring(int beginIndex, int endIndex)       根据开始和结束索引进行截取,得到新的字符串(包前不包后)
          String rs = s.substring(2,5);
          System.out.println(rs);
        // 5.    public String substring(int beginIndex)                     从传入的索引处截取,截取到末尾,得到新的字符串
          String rs1 = s.substring(6);
        System.out.println(rs1);
        // 6.    public String replace(CharSequence target, CharSequence replacement) 使用新值,将字符串中的旧值替换,得到新的字符串
        String rs3 = s.replace("五月天","***");
        System.out.println(rs3);
        // 7.    public String[] split(String regex)                         根据传入的规则切割字符串,得到字符串数组返回
        String rs4 = "刘备,关羽,张飞";
        String [] name = rs4.split(",");
        for (int i = 0; i < rs.length(); i++) {
            System.out.println("名字是:"+name[i]);
        }
    }
}

四.String案例

1.String类开发验证码功能
public class StringDemo1 {
//    需求:
//    随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。
//    分析:
//    定义一个String类型的变量存储验a-zA-Z0-9之间的全部字符。
//    循环5次,随机一个范围内的索引,获取对应字符连接起来即可。
public static void main(String[] args) {
    Random r = new Random();
    //1.定义可能出现的字符
    String datas = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    //2.循环5次,随机生成一个随机的索引,提取对应的字符连接起来即可
    String code = "";
    for (int i = 0; i < 5; i++) {
        //随机生成一个索引
        int index = r.nextInt(datas.length());
        char data = datas.charAt(index);
        code += data;
    }
    System.out.println(code);
}
}
2.模拟用户登陆功能
public class StringDemo2 {
//    需求:
//    模拟用户登录功能,最多只给三次机会。
//    分析:
//    系统后台定义好正确的登录名称,密码。
//    使用循环控制三次,让用户输入正确的登录名和密码,判断是否登录成功,登录成功则不再进行登录;登录失败给出提示,并让用户继续登录。
public static void main(String[] args) {
    //1.定义正确的登录名和密码
    String okLoginName = "zhangfei";
    String okPassword  = "123456";
    Scanner sc = new Scanner(System.in);
    //2.定义一个循环,循环3次,让用户输入
    for (int i = 1; i <= 3; i++) {

        System.out.println("请您输入登入名:");
        String LoginName = sc.next();
        System.out.println("请输入您的密码:");
        String password  = sc.next();

        //3.判断是否登陆成功
        if (okLoginName.equals(LoginName)){
            if (okPassword.equals(password)){
                System.out.println("登陆成功!欢迎回来哟~~~");
                break;
            }else {
                System.out.println("您输入的密码有误!请重新输入,您还剩"+(3-i)+"次机会哦~~~");
            }
        }else {
            System.out.println("您输入的登陆名有误!您还剩"+(3-i)+"次机会哦~~~");
        }}}}
3.手机号码屏蔽
public class StringDemo3 {
    public static void main(String[] args) {
        //键盘录入一个手机号码
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入您的手机号码:");
        String tel = sc.next();

        //13349675348
        String before = tel.substring(0,3);
        String after = tel.substring(7);

        String s = before + "****" + after;
        System.out.println(s);
    }
}

五.集合ArrayList

1.ArrayList集合
  • ArrayList是集合中的一种,它支持索引。

ArrayList集合的对象的创建

构造器说明
public ArrayList()创建一个空的集合对象

ArrayList集合的添加元素的方法

方法名说明
public boolean add(E e)将指定的元素追加到此集合的末尾
public void add(int index,E element)在此集合中的指定位置插入指定的元素
public class ArrayListDemo1 {
    public static void main(String[] args) {
        //1.创建ArrayList的集合对象
        ArrayList list = new ArrayList();

        //2.添加数据
        list.add(123);
        list.add("张飞");
        list.add("mysql");
        list.add('c');

        System.out.println(list);
    }
}
2.ArrayList对于泛型的支持

泛型概述

  • ArrayList:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。

举例:

  • ArrayList :此集合只能操作字符串类型的元素。

  • ArrayList:此集合只能操作整数类型的元素。

泛型只能支持引用数据类型,不支持基本数据类型。

public class ArrayListDemo2 {
    public static void main(String[] args) {
        ArrayList<String> ar = new ArrayList<>();
        ar.add("刘备");
        ar.add("关羽");
        ar.add("张飞");
        System.out.println(ar);

        ArrayList<Integer> ar1 = new ArrayList<>();
        ar1.add(1);
        ar1.add(2);
        ar1.add(3);
        System.out.println(ar1);
    }
}
3.ArrayList常用API
方法名说明
public int length()返回此字符串的长度
public char charAt(int index)获取某个索引位置处的字符
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)根据传入的规则切割字符串,得到字符串数组返回
public class ArrayListDemo3 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("关羽");
        list.add("张飞");
        list.add("赵云");
        list.add("黄忠");
        list.add("马超");
        list.add("关羽");
        //1.     public E get(int  index)          返回指定索引处的元素
        String a = list.get(2);
        System.out.println(a);
        //2.     public int  size()                返回集合中的元素的个数
        System.out.println(list.size());

        //3.     遍历集合中的数组
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i)+"\t");
        }
        System.out.println();
        //4.     public E remove(int  index)       删除指定索引处的元素,返回被删除的元素
        list.remove(2);
        System.out.println(list);
        //5.     public boolean remove(Object o)   删除指定的元素,返回删除是否成功
        System.out.println(list.remove("张飞"));
        System.out.println(list);
        //6.     public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
        String b = list.set(1,"诸葛亮");
        System.out.println(b);
        System.out.println(list);
    }
}

五.ArrayList案例

1.遍历并删除元素值
public class ArrayListDemo4 {
//    需求:
//    某个班级的考试在系统上进行,成绩大致为:98, 77, 66, 89, 79, 50, 100
//    现在需要先把成绩低于80分以下的数据去掉。
//    分析:
//    定义ArrayList集合存储多名学员的成绩。
//    遍历集合每个元素,如果元素值低于80分,去掉它。
    public static void main(String[] args) {
        ArrayList<Integer> scores = new ArrayList();
        scores.add(90);
        scores.add(32);
        scores.add(95);
        scores.add(100);
        scores.add(50);
        scores.add(70);
        scores.add(60);
        scores.add(80);
        scores.add(70);
        System.out.println(scores);
        //遍历集合
        //方案一
        /*for (int i = 0; i < scores.size(); i++) {
            Integer a = scores.get(i);
            if (a < 80){
                scores.remove(a);
                i--;// 删除成功后往后退一步,这样就不会跳过数据了
            }
        }
        System.out.println(scores);*/
        //方案二:倒着遍历
        for (int i = scores.size()-1; i >= 0 ; i--) {
            if (scores.get(i) < 80){
                scores.remove(i);
            }
        }
        System.out.println(scores);
    }
}
2.影片信息在程序中的表示
public class ArrayListDemo5 {
//    需求
//    某影院系统需要在后台存储上述三部电影,然后依次展示出来。
//    分析
//    定义一个电影类,定义一个集合存储电影对象。
//    创建3个电影对象,封装相关数据,把3个对象存入到集合中去。
//    遍历集合中的3个对象,输出相关信息。
    //《肖申克的救赎》,9.7,罗宾斯
    //《霸王别姬》,9.6,张国荣,张丰毅
    //《阿甘正传》,9.5,汤姆汉克斯
public static void main(String[] args) {
    ArrayList<Movies> movie = new ArrayList<>();
    Movies m1 = new Movies("《肖申克的救赎》",9.7,"罗宾斯");
    Movies m2 = new Movies("《霸王别姬》",9.6,"张国荣,张丰毅");
    Movies m3 = new Movies("《阿甘正传》",9.5,"汤姆汉克斯");
    movie.add(m1);
    movie.add(m2);
    movie.add(m3);
    for (int i = 0; i < movie.size(); i++) {
        Movies a = movie.get(i);
        System.out.println("电影名称:"+a.getName());
        System.out.println("电影分数:"+a.getScore());
        System.out.println("电影主演:"+a.getActor());
        System.out.println("--------------------------");
    }
}
}
public class Movies {
    private String name;
    private double score;
    private String actor;

    public Movies() {
    }

    public Movies(String name, double score, String actor) {
        this.name = name;
        this.score = score;
        this.actor = actor;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public String getActor() {
        return actor;
    }

    public void setActor(String actor) {
        this.actor = actor;
    }
}

集合中存储的元素并不是对象本身,而是对象的地址。

六.学生信息系统的数据搜索

public class SearchStudent {
//    需求
//    后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能。
//    分析
//    定义Student类,定义ArrayList集合存储如上学生对象信息,并遍历展示出来。
//    提供一个方法,可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生对象信息,并展示。
//    使用死循环,让用户可以不停的搜索。
public static void main(String[] args) {
    //1.将信息存入集合中
    ArrayList<Student> students = new ArrayList<>();
    students.add(new Student("20221","刘备",27,"战前训导"));
    students.add(new Student("20222","关羽",26,"二弟天下无敌"));
    students.add(new Student("20223","张飞",25,"三弟脸很黑"));
    students.add(new Student("20220","诸葛亮",30,"光环效果:奥术智慧"));
    //2.遍历集合
    System.out.println("学号\t名字\t年龄\t效果");
    for (int i = 0; i < students.size(); i++) {
        Student s = students.get(i);
        System.out.println(s.getStudentNumber()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getClassName());
    }
    //定义一个扫描器
    Scanner sc = new Scanner(System.in);
    while (true){
        System.out.println("请输入您要查询的学号:");
        String studyNumber= sc.next();
        //调用方法查询
        Student s = getStudentByid(students,studyNumber);
        //判断s中是否存在学生对象地址
        if (s == null){
            System.out.println("查无此人!");
        }else {
            System.out.println("您查询的学生信息如下:");
            System.out.println(s.getStudentNumber()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getClassName());
        }
    }
}
//3.定义一个方法完成搜索学号功能
    /**
     * 根据学生的学号查询学生返回对象
     * @param students 存储全部学生对象的集合
     * @param studyNumber 搜素学生的学号
     * @return 学生对象 | null
     */
    public static Student getStudentByid(ArrayList<Student> students,String studyNumber){
        //1.遍历集合中的元素
        for (int i = 0; i < students.size(); i++) {
            //2.判断遍历的学号是否与我们输入的学号相同
            Student s = students.get(i);
            if (s.getStudentNumber().equals(studyNumber)){
                //代表这个就是我们要找的学生对象
                return s;
            }
            }//查无此人
        return null;
        }
}
public class Student {
    private String studentNumber;
    private String name;
    private int age;
    private String className;

    public Student() {
    }

    public Student(String studentNumber, String name, int age, String className) {this.studentNumber = studentNumber;
        this.name = name;
        this.age = age;
        this.className = className;}

    public String getStudentNumber() { return studentNumber;}

    public void setStudentNumber(String studentNumber) {this.studentNumber = studentNumber; }

    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 getClassName() {return className; }

    public void setClassName(String className) {this.className = className;}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值