Java复习笔记入门阶段08:String和ArrayList

目录

1.API

2.String类型

2.1 String类特点

2.2 创建字符串对象

2.3 方法间区别

2.4 常见面试题

2.5 常用API

3.ArrayList

3.1 泛型概述

4.集合案例

4.1 遍历并删除元素值

4.2 存储自定义型对象:

4.3 元素搜索


1.API

  • API(ApplicationProgrammingInterface,应用程序编程接口)

  • java写好的功能代码,可直接调用

  • 有相应的技术文档

2.String类型

定义的变量用于存储字符串,同时提供了很多操作字符串的功能;

2.1 String类特点

  • String常被称为不可变字符串类型,对象创建后不可更改;

  • String每次修改都是产生并指向新的字符串对象;

  • 通过“+”连接几个字符串,原来字符串没有改变,只是可以通过拼接控制输出效果

2.2 创建字符串对象

/**
 * 创建String的常用方法
 */
public class StringDemo {
    public static void main(String[] args) {
        String name = "wind";
        System.out.println(name);

        String s1 = new String();
        System.out.println(s1);//空白

        String s2 = new String("岩峰");
        System.out.println(s2);

        char[] c = {'a','v','i'};
        String s3 = new String(c);
        System.out.println(s3);//avi

        byte[] b ={97,98,99};
        String s4 = new String(b);
        System.out.println(s4);//abc
    }
}

2.3 方法间区别

以“ ”方式给出字符串对象,在字符串常量池中存储,相同内容只存一份

new对象,产生新对象,放在堆内存中;

        String name = "wind";
        String name2 = "wind";
        System.out.println(name==name2);//true

        char[] c = {'a','v','i'};
        String s3 = new String(c);
        String s33 = new String(c);
        System.out.println(s3==s33);//false

2.3.1 String常量原理

  • 在堆内存的字符串常量池创建,将地址赋给变量名;

  • 相同内容不会在常量池中创建新的;

 

2.3.2 new String对象原理

每次new都会在堆内存中创建新的对象,赋予常量的地址不同;

 

2.4 常见面试题

        String s2 = new String("wind");//创建两个对象;一个常量,一个new;指向堆内存
        String s22 = "wind";//创建0个对象,原因是常量池中有wind了,上方创建,指向常量池
        System.out.println(s2==s22);//false

        String s1 = "abc";//常量池
        String s2 = "ab";
        String s3 = s2 + "c";//运算,指向堆内存
        System.out.println(s1==s3);//false

        String s1 = "abc";//常量池
        String s2 = "a"+"b"+"c";//java存在编译优化机制,直接转成"abc";字面量是确定的会优化
		//变量编译阶段不知道值,字面量可以
        System.out.println(s1==s2);//true

2.5 常用API

        //自定义一个字符串
        //注意这里字符串最后是空,下面会用到
        String str = new String("13,2df+fk,05s,kd, ");

        //这里我们假设使用","作为分隔符
        String[] newStr = str.split(",");
        //[13, 2df+fk, 05s, kd,  ]
        System.out.println(Arrays.toString(newStr));
        
        //两个分隔符的情况  ","和"+"作为分隔符
        //同样还是返回字符串数组类型的数据
        //这里我实验之后发现给"+"加上"[]"之后才可以通过编译,得到正确的结果
        String[] newStr2 = str.split(",|[+]");
        //[13, 2df, fk, 05s, kd,  ]
        System.out.println(Arrays.toString(newStr2));


        /**
         * 
         * 只是条无辜的分割线
         * 
         */

        String name = "wind";
        String passWord = "qq123456";
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入姓名:");
        String name1 = scanner.next();
        System.out.println("输入密码:");
        String pass = scanner.next();
        /**
         * equals 比较字符串是否一致
         */
        if (name.equals(name1) && passWord.equals(pass)){
            System.out.println("正确!");
        }else {
            System.out.println("错误!");
        }

        String nameTwo = "WinD";
        String passTwo= "Qq123456";
        /**
         * equalsIgnoreCase  忽略大小写,比较字符串是否一致
         */
        if (name.equalsIgnoreCase(nameTwo) && passWord.equalsIgnoreCase(passTwo)){
            System.out.println("正确");
        }

2.5.1 案例:验证码


/**
 * 验证码:
 */
public class StringTest1 {
    public static void main(String[] args) {
        String datas = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
        int dataLength = datas.length();
        Random random = new Random();
        String code = "";
        for (int i = 0; i < 5; i++) {
            int index = random.nextInt(dataLength);
            char c = datas.charAt(index);
            code += c;
        }
        System.out.println("输出字符串:"+code);
    }

}

2.5.2 案例:屏蔽手机号

/**
 * 屏蔽部分手机号码
 */
public class StringTest2 {
    public static void main(String[] args) {
        String phone = "132xxxx9xxx";

        //截取前三位
        String before = phone.substring(0,3);
        //截取后四位
        String after = phone.substring(7);

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

3.ArrayList

  • 代表集合类,集合是一种容器,与数组类似,不同的是集合大小不固定;

    • 非常适合元素个数不确定,进行增删业务场景

    • 功能丰富

  • 通过创建ArrayList对象得到一个集合容器;

    • ArrayList是集合一种,支持索引

        ArrayList list = new ArrayList();
        list.add(1);
        list.add("张燕");
        list.add("凛冬");
        list.add(188);
        list.add(1999);
        //[1, 张燕, 凛冬, 188, 1999]
        System.out.println(list);

        //指定位置插入,后面后移
        list.add(2,"小火火");
        //[1, 张燕, 小火火, 凛冬, 188, 1999]
        System.out.println(list);

3.1 泛型概述

ArrayList<E>:泛型类,编译阶段约束集合对象只能操作某种数据类型;

ArrayList<String>:只能操作字符串类型;

ArrayList<Integer>:只能操作整数类型;

注意:集合中只能存储引用类型,不支持基本数据类型

4.集合案例

4.1 遍历并删除元素值

删除两种方案:

1.应对补位,i--;

2.倒序删除;

/**
 * 遍历并删除元素值:
 *      低于80的值删除;
 */
public class ArrayListDemo1 {
    public static void main(String[] args) {
        Integer[] list = {98,77,66, 89,79,50,88,100};
        ArrayList<Integer> scores = new ArrayList<>();
        //同<泛型>添加
        Collections.addAll(scores, list);

        //方案一:i--补位
/*        for (int i = 0; i < scores.size(); i++) {
            if (scores.get(i) < 80){
                scores.remove(i);
                i--;//删除成功后,后退一步,再次判断,应对补位
            }
        }*/

        //方案二:倒排,删除后补位不影响
        for (int i = scores.size()-1; i >0 ; i--) {
            if (scores.get(i) < 80){
                scores.remove(i);
            }
        }
        System.out.println(scores.toString());
    }
}

4.2 存储自定义型对象:

集合中存储的是对象的地址!

/**
 * 存储自定义型对象:
 *  存入三部电影信息,并输出
 */
public class ArrayListDemo2 {
    public static void main(String[] args) {
        Movie m1 = new Movie("斗破苍穹",6.6,"消炎");
        Movie m2 = new Movie("武动乾坤",6.6,"林东");
        Movie m3 = new Movie("大主宰",7.6,"木木");

        ArrayList<Movie> movies = new ArrayList<>();
        //存了三个地址
        movies.add(m1);
        movies.add(m2);
        movies.add(m3);
        for (int i = 0; i < movies.size(); i++) {
            Movie movie = movies.get(i);
            System.out.println(movie.getName()+movie.getScore()+movie.getActor());
            System.out.println("----------------------------");
        }
    }
}

4.3 元素搜索

/**
 * 元素搜索:
 */
public class ArrayListDemo3 {
    public static void main(String[] args) {
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("1","赵日天",18,"炸天一班"));
        students.add(new Student("2","叶良辰",38,"炸天一班"));
        students.add(new Student("3","荀彧",88,"炸天二班"));
        students.add(new Student("4","李白",28,"炸天二班"));

        System.out.println("全部学生信息");
        System.out.println("-------------------------");
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            System.out.println(s.getStudyNumber()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getClassName());
            System.out.println("-------------------------");
        }

        Scanner scanner = new Scanner(System.in);

        while (true){
            System.out.println("输入要搜索学生信息的Id:");
            String id = scanner.next();
            //根据学号搜索信息
            Student ss = getStudentById(students, id);
            if (ss==null || ss.equals("")){
                System.out.println("查无此人");
                System.out.println("-------------------------");
            }else {
                System.out.println("-------查询到的信息如下--------");
                System.out.println(ss.getStudyNumber()+"\t"+ss.getName()+"\t"+ss.getAge()+"\t"+ss.getClassName());
                System.out.println("-------------------------");
            }

        }

    }

    /**
     * 根据学号查询信息:
     * @param students 全体学生信息集合
     * @param id
     */
    private static Student getStudentById(ArrayList<Student> students,String id) {
        for (int i = 0; i < students.size(); i++) {
            Student student = students.get(i);
            if (student.getStudyNumber().equals(id)){
                return student;
            }
        }
        return null;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值