第八章 常用API(String、ArrayList)

第八章 常用API(String、ArrayList)


前言

API(Application Programming Interface,应用,程序编程接口)

  • Java写好的技术(功能代码),咱们可以直接调用。
  • Oracle也为Java提供的这些功能代码提供了相应的API文档 (技术使用说明书)。

String简单介绍

  • String类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用。
    在这里插入图片描述

ArrayList简单介绍

  • ArrayList代表的是集合类,集合是一种容器,与数组类似,不同的是集合的大小是不固定的。
  • 通过创建ArrayList的对象表示得到一个集合容器,同时ArrayList提供了比数组更好用,更丰富的API(功能)给程序员使用。
    在这里插入图片描述

提示:以下是本篇文章正文内容,下面案例可供参考

一、String

1、String类概述

String 概述

  • java.lang.String类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。
  • Java程序中的suoyong-字符串文字(例如“abc”)都为此类的对象。
    在这里插入图片描述
    String类的特点详情
  • String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2、String类创建对象的2种方式

创建字符串对象的2种方式

  • 方式一:直接使用" " 定义。(推荐方式)
    在这里插入图片描述
  • 方式二:通过String类的构造器创建对象。
    在这里插入图片描述
    有什么区别?(面试常考)
  • 以" " 方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。
  • 通过构造器new对象,没new一次都会产生一个新对象,放在堆内存中。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3、String类常见面试题

在这里插入图片描述

4、String类常用API-字符串内容比较

在这里插入图片描述
字符串的内容比较:

  • 推荐使用String类提供的"equals" 比较:只关心内容一样即可
    在这里插入图片描述
    在这里插入图片描述

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

在这里插入图片描述

package com.itheima.string;

/**
    目标:掌握String常用的其他API
 */
public class StringAPIOtherDemo5 {
    public static void main(String[] args) {
        //1、public int length() 返回此字符串的长度
        String name = "我爱你中国love";
        System.out.println(name.length());  //9

        //2、public char charAt(int index) 获取某个索引位置处的字符
        char c = name.charAt(1);
        System.out.println(c);  //爱

        System.out.println("--------遍历字符串中的每个字符--------");
        for (int i = 0; i < name.length(); i++) {
            char ch = name.charAt(i);
            System.out.println(ch);
        }

        //3、public char[] toCharArray(): 将当前字符串转换成字符数组返回
        char[] chars = name.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char ch = chars[i];
            System.out.println(ch);
        }

        //4、public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字符串(包前不包后)
        String name2 = "Java是最厉害的编程语言!";
        String rs = name2.substring(0, 9);
        System.out.println(rs);  //Java是最厉害的
        String rs1 = name2.substring(4, 9); 
        System.out.println(rs1);  //是最厉害的

        //5、public String substring(int beginIndex) 从当前索引一直截取到末尾
        String rs2 = name2.substring(4);
        System.out.println(rs2);  //是最厉害的编程语言!

        //6、public String replace(CharSequence target,CharSequence replacement)
        String name3 = "金三胖是最厉害的80后,金三胖棒棒的!";
        String rs3 = name3.replace("金三胖","***");
        System.out.println(rs3);  //***是最厉害的80后,***棒棒的!

        //7、public boolean contains(CharSequence s)
        System.out.println(name3.contains("金三胖"));  //true
        System.out.println(name3.contains("金二胖"));  //false

        //8、public boolean startsWiths(String prefix)
        System.out.println(name3.startsWith("金三胖"));  //true
        System.out.println(name3.startsWith("金三胖是最厉害的"));  //true
        System.out.println(name3.startsWith("金二胖"));  //false

        //9、public String[] split(String s) 按照某个内容把字符串分割成字符串数组返回
        String name4 = "hhh,jjj,www";
        String[] names = name4.split(",");
        for (int i = 0; i < names.length; i++) {
            System.out.println("选择了:" + names[i]);  //选择了:hhh 选择了:jjj 选择了:www
        }
    }
}

String案例操作

在这里插入图片描述

package com.itheima.string;

import java.util.Random;

/**
    练习题:使用String完成随机生成5位的验证码
 */
public class StringExec6 {
    public static void main(String[] args) {
        //1、定义可能出现的字符信息
        String datas = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        //2、循环5次,每次生成一个随机的索引,提取对应的字符连接起来即可
        String code = "";
        Random r = new Random();
        for (int i = 0; i < 5; i++) {
            //随机一个索引
            int index = r.nextInt(datas.length());
            char c = datas.charAt(index);
            code += c;
        }

        //3、输出字符串变量即可
        System.out.println(code);
    }
}

在这里插入图片描述

public class StringExec7 {
    public static void main(String[] args) {
        //1、定义正确的登录名和密码
        String okLoginName = "admin";
        String okPassword = "itheima";

        //2、定义一个循环,循环3次,让用户登录
        Scanner sc = new Scanner(System.in);
        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)){
                //4、判断密码是否正确
                if (okPassword.equals(password)){
                    System.out.println("登陆成功!欢迎进入系统~~~~~~");
                    break;
                }else {
                    //密码错误
                    System.out.println("您的登录密码不正确!您还剩余" + (3 - i) + "次机会!");
                }
            }else {
                System.out.println("您的登录名称不正确!您还剩余" + (3 - i) + "次机会!");
            }
        }
    }
}

在这里插入图片描述

package com.itheima.string;

import java.util.Scanner;

/**
    练习题:手机号码屏蔽
 */
public class StringExec8 {
    public static void main(String[] args) {
        //1、键盘录入一个手机号码
        Scanner sc = new Scanner(System.in);
        System.out.println("请您输入您的手机号码:");
        String tel = sc.next();

        //2、截取号码的前三位,后四位
        String before = tel.substring(0, 3); //0  1  2
        String after = tel.substring(7);  //从索引7开始截取到手机号码的末尾

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

二、ArrayList

1.集合概述

集合是与数组类似,也是一种容器,用于装数据的
数组的特点
在这里插入图片描述

  • 数组定义完成并启动后,类型确定、长度固定。
  • 问题:在个数不确定,且要进行增删数据操作的时候,数组是不太合适的。

集合的特点
在这里插入图片描述

  • 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。
  • 集合非常适合做元素个数不确定,且要进行增删操作的业务场景。
  • 集合提供了许多丰富、好用的功能,而数组的功能很单一。
    在这里插入图片描述

2、 ArrayList集合快速入门

ArrayList集合

  • ArrayList是集合中的一种,它支持索引。(暂时先学这个,后期学习整个集合体系)

ArrayList集合的对象获取
在这里插入图片描述
ArrayList集合添加元素的方法
在这里插入图片描述
在这里插入图片描述

3、ArrayList对于泛型的支持

泛型概述

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

举例:

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

注意:集合中只能存储引用类型,不支持基本数据类型。
在这里插入图片描述

4、ArrayList常用API、遍历

ArrayList集合常用方法
在这里插入图片描述

package com.itheima.arraylist;

import java.util.ArrayList;
import java.util.List;

/**
    目标:掌握ArrayList籍华人的常用API
 */
public class ArrayListDemo3 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Java");
        list.add("Java");
        list.add("MySQL");
        list.add("MyBatis");
        list.add("HTML");

        //1、public E get(int index) 返回指定索引处的元素
        String e = list.get(3);
        System.out.println(e);

        //2、public int size() 获取集合的大小(元素个数)
        System.out.println(list.size());  //5

        //3、完成集合的遍历
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

        //4、public E remove(int index) 删除指定索引处的元素,返回被删除的元素
        System.out.println(list);  //[Java, Java, MySQL, MyBatis, HTML]
        String e2 = list.remove(2);
        System.out.println(e2);
        System.out.println(list);

        //5、public boolean remove(Object o) 删除指定的元素,返回删除是否成功true/false
        System.out.println(list.remove("MyBatis"));
        System.out.println(list);

        ArrayList<String> list1 = new ArrayList<>();
        list1.add("Java");
        list1.add("很有用");
        list1.add("Java");
        list1.add("MySQL");
        System.out.println(list1);
        //只会删除第一次出现的元素,后面的不删
        System.out.println(list1.remove("Java"));
        System.out.println(list1);

        //6、public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
        String e3 = list1.set(0, "坏官方");
        System.out.println(e3);
        System.out.println(list1);
    }
}

5、ArrayList集合案例:遍历并删除元素

在这里插入图片描述

package com.itheima.arraylist;

import java.util.ArrayList;

public class ArrayListTest4 {
    public static void main(String[] args) {
        //目标:学习遍历并删除元素的正确方案
        //1、创建一个ArrayList集合存储一个班级学生的成绩
        ArrayList<Integer> scores = new ArrayList<>();
        scores.add(98);
        scores.add(77);
        scores.add(66);
        scores.add(89);
        scores.add(50);
        scores.add(79);
        scores.add(100);
        System.out.println(scores);

        //2、把低于80分的成绩从集合中去掉
        //scores = [98, 77, 66, 89, 50, 79, 100]
        //scores = [98, 66, 89, 50, 100]
        //                           i
        //有毛病的代码!
//        for (int i = 0; i < scores.size(); i++) {
//            int score = scores.get(i);
//            if (score < 80){
//                //删除这个分数
//                scores.remove(i);
//            }
//        }
//        System.out.println(scores);

        //scores = [98, 77, 66, 89, 50, 79, 100]
        //scores = [98, 89, 100]
        //                   i
        //完美方案之一
      /*  for (int i = 0; i < scores.size(); i++) {
            int score = scores.get(i);
            if (score < 80){
                //删除这个分数
                scores.remove(i);
                i--; //删除成功后,必须退一步,这样可以保证下次回到这个位置,如此则不会跳过数据
            }
        }
        System.out.println(scores); */

        //scores = [98, 77, 66, 89, 50, 79, 100]
        //完美方案之二:从后面倒着遍历在删除就可以
        for (int i = scores.size() - 1; i >= 0; i--){
            int score = scores.get(i);
            if (score < 80){
                //删除这个分数
                scores.remove(i);
            }
        }
        System.out.println(scores);
    }
}

在这里插入图片描述

ArrayList集合案例:存储自定义类型的对象

在这里插入图片描述

package com.itheima.arraylist;

import java.util.ArrayList;

/**
    案例:集合存储自定义元素并遍历。
    需求:定义电影类(名称,分值,演员),创建3个电影对象,代表三部影片,存入集合中并遍历
    《肖申克的救赎》, 9.7 , 罗宾斯
    《霸王别姬》, 9.6 , 张国荣、张丰毅
    《阿甘正传》, 9.5 ,汤姆.汉克斯
 */
public class ArrayListTest5 {
    public static void main(String[] args) {
        //目标:理解ArrayList集合存储自定义类型的对象
        //1、定义电影类
        //2、创建三个电影对象
        Movie m1 = new Movie("《肖申克的救赎》", 9.7 , "罗宾斯");
        Movie m2 = new Movie("《霸王别姬》", 9.6 , "张国荣、张丰毅");
        Movie m3 = new Movie("《阿甘正传》", 9.5 , "汤姆.汉克斯");
        //3、创建一个电影类型的ArrayList集合,存储三部电影对象
        ArrayList<Movie> movies = new ArrayList<>();
        movies.add(m1);
        movies.add(m2);
        movies.add(m3);
        System.out.println(movies);
        //4、遍历电影类型的而集合中的每个电影对象,访问它的信息即可。
        for (int i = 0; i < movies.size(); i++) {
            //i = 0 1 2
            Movie m = movies.get(i);
            System.out.println("电影名称:" + m.getName());
            System.out.println("电影评分:" + m.getScore());
            System.out.println("电影主演:" + m.getActor());
            System.out.println("--------------------");
        }
    }
}

在这里插入图片描述

ArrayList集合案例:元素搜索

在这里插入图片描述

package com.itheima.arraylist;

import java.util.ArrayList;
import java.util.Scanner;

/**
    案例:学生信息系统:展示数据,并按照学号完成搜索
      学生类信息(学号、姓名、性别、班级)
      测试数据:
      "20180302","叶孤城",23,"护理一班"
      "20180303","东方不败",23,"推拿二班"
      "20180304","西门吹雪",26,"中药学四班"
      "20180305","梅超风",26,"神经科二班"
 */
public class ArrayListTest6 {
    public static void main(String[] args) {
        //1、定义学生类
        //2、创建集合存储学生对象,创建学生对象封装学生信息
        // 把学生对象添加到集合中去
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student("20180302","叶孤城",23,"护理一班"));
        students.add(new Student("20180303","东方不败",23,"推拿二班"));
        students.add(new Student("20180304","西门吹雪",26,"中药学四班"));
        students.add(new Student("20180305","梅超风",26,"神经科二班"));
        //3、遍历这些学生信息展示
        System.out.println("学号\t\t\t姓名\t\t年龄\t班级");
        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());
        }

        //4、定义方法完成按照学号的搜索功能
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("请您输入学号查询学生信息:");
            String studyNumber = sc.next();
            //5、调用方法查询
            Student s = getStudentById(students, studyNumber);
            //6、判断s中是否存在学生对象地址
            if (s == null){
                System.out.println("查无此人!");
            }else {
                System.out.println("您查询的学生信息如下:");
                System.out.println(s.getStudyNumber()+"\t" + s.getName() + "\t" + s.getAge() + "\t" + s.getClassName());
            }

        }
    }

    /**
     * 根据学生的学号查询学生对象返回
     * @param students  存储全部学生对象的集合
     * @param studyNumber  搜索的学生的学号
     * @return  学生对象 | null
     */
    public static Student getStudentById(ArrayList<Student> students, String studyNumber){
        //1、遍历全部学生对象
        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            //2、询问当前遍历的这个学生对象的学号,是否是我们要找的学号
            if (s.getStudyNumber().equals(studyNumber)){
                //这个s代表的学生对象,就是我们要找的,返回他
                return s;
            }
        }
        //查无此人
        return null;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值