java编程之面向对象3

面向对象3常用API(String、ArrayList)

一、String类

概述

String其实常被称为不可变字符串类型,它的对象在创建后不能被更改
java编程之面向对象3

创建字符串对象

两种方式

//        方式一:直接使用双引号得到字符串对象
        String name="我爱你中国";
        System.out.println(name);

// 方式二:        1、public String():创建一个空白字符串对象,不含有任何内容(几乎不用)
        String s1=new String();
        System.out.println(s1);

//        2、public String(String):根据传入的字符串内容,来创建字符串对象(几乎不用)
        String s2=new String("我是中国人");
        System.out.println(s2);

//        3、public String(char[] c):根据字符数组的内容,来创建字符串对象
        char[] chars={'我','是','中','国','人'};
        String s3=new String(chars);
        System.out.println(s3);

//        4、public String(byte[] b):根据字节数组的内容,来创建字符串对象
        byte[] bytes={97,98,99,65,66,67};
        String s4=new String(bytes);
        System.out.println(s4);

区别:

  1. 以” “方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份
  2. 通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中
    java编程之面向对象3
    java编程之面向对象3
    java编程之面向对象3

String 常见面试题

  1. java编程之面向对象3
    java编程之面向对象3

字符串内容的比较

内容比较

  1. 字符串内容比较不适合用“==”比较
  2. 字符串内容比较用“equals”比较:只关心内容一样即可
        String okUser="root";
        String okPass="123456";
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入用户名:");
        String User=sc.next();
        System.out.println("请输入密码:");
        String pass=sc.next();
        if(okUser.equals(User)&&okPass.equals(pass)){
            System.out.println("登录方式2成功");
        }else{
            System.out.println("登录失败!");
        }

java编程之面向对象3

忽略大小写比较内容的Api

java编程之面向对象3
java编程之面向对象3

开发中当对基本类型比较时使用"=="

String常用API

length()、charAt()、toCharArray()

public static void main(String[] args) {
//        1.public int length():获取字符串长度
        String name="我爱你中国love";
        System.out.println(name.length());
//        2.public char charAt(int index):获取某个索引位置处的字符
        char c=name.charAt(1);
        System.out.println(c);
        for (int i = 0; i < name.length(); i++) {
            char ch=name.charAt(i);
            System.out.println(ch);
        }
//        3.public char[] toCharArray():把字符串转换成字符数组
        char[] ch=name.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            char cha=ch[i];
            System.out.println(cha);
        }

    }

java编程之面向对象3

subString(),replace(),split(),contains(),startsWiths()

//        4.public String substring(int beginIndex,int endIndex):截取内容(含头不含尾)
        String name2="Java是最厉害的编程语言";
        String ss=name2.substring(0,9);
        System.out.println(ss);
        String ss1=name2.substring(4,9);
        System.out.println(ss1);

//        5.public String substring(int beginIndex):从当前索引一直截取到末尾
        String ss2=name2.substring(4);
        System.out.println(ss2);

//        6.public String replace(CharSequence target,CharSequence replacement)
        String name3="金三胖是最厉害的90后,金三胖棒棒的,我好爱金三胖";
        String rp=name3.replace("金三胖","***");
        System.out.println(rp);

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

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

//        9.public String[] split(String s):按照某个内容把字符串分割成字符串数组返回
        String name4="王宝强,贾乃亮,黄晓明";
        String[] result=name4.split(",");
        for (int i = 0; i < result.length; i++) {
            System.out.println("分割为:"+result[i]);
        }

java编程之面向对象3

String类开发验证码功能

需求:

随机产生一个5位的验证码,每位可能是数字,大写字母,小写字母

  1. 定义一个String类型的变量存储a-zA-Z0-9之间的全部字符
  2. 循环5次,随机一个范围内的索引,获取对应字符连接起来即可
//        1.定义可能出现的字符信息
        String st="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random r=new Random();

//        2.循环5次,每次生成一个随机的索引,提取对应的字符连接起来即可
        String ch="";
        for (int i = 0; i < 5; i++) {
            //随机一个索引
            int num=r.nextInt(st.length());
            ch+=st.charAt(num);
        }
        //3.输出字符中的变量即可
        System.out.println(ch);

java编程之面向对象3

模拟用户登录功能

需求

模拟用户登录功能,最多只给三次机会

  1. 系统后台定义好正确的登录名称,密码
  2. 使用循环控制三次,让用户输入正确的登录名和密码,判断是否登录成功,登录成功则不再进行登录;登录失败给出提示,并让用户继续登录
//        1.定义正确的登录名称和密码
        String okLoginName="admin";
        String okLoginPass="123456";
        
//        2.定义一个循环,循环3次,让用户登录
        Scanner sc=new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            System.out.println("请您输入用户登录名称:");
            String loginName=sc.next();
            System.out.println("请您输入用户登录密码:");
            String loginPass=sc.next();
            
//            3.判断登录是否成功
            if(loginName.equals(okLoginName)){
//                4.判断密码是否正确
                if(loginPass.equals(okLoginPass)){
                    System.out.println("登录成功!欢迎进入系统随意浏览~~~");
                    break;
                }else{
//                    密码错误了
                    System.out.println("您的登录密码输入不正确!还剩"+(3-i-1)+"次机会登录");
                }
            }else{
                System.out.println("您的登录名称不正确!还剩"+(3-i-1)+"次机会登录");
            }
        }

java编程之面向对象3

手机号码屏蔽

需求

以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽,最终效果为:
158****7839

  1. 键盘录入一个字符串,用Scanner实现
  2. 截取字符串前三位,截取字符串后四位
System.out.println("请输入手机号码:");
        Scanner sc=new Scanner(System.in);
        String phoneNum=sc.next();
        String[] phoneArray=new String[3];
        phoneArray[0]=phoneNum.substring(0,3);
        phoneArray[1]=phoneNum.substring(3,7);
        phoneArray[2]=phoneNum.substring(7);
        String hideAfter=phoneArray[0]+"****"+phoneArray[2];
        System.out.println("隐藏手机号之后为:"+hideAfter);

java编程之面向对象3

二、ArrayList类

介绍

  1. ArrayList 代表的是集合类,集合是一种容器,与数组类似,不同的是集合的大小是不固定的。
  2. 通过创建ArrayList的对象表示得到一个集合容器,同时ArrayList提供了比数组更好用,更丰富的API给程序员使用。
  3. 数组的特点:类型确定,长度固定。在个数不能确定,且要进行增删数据操作的时候,数组是不太合适的。
  4. 集合的特点:集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。

ArrayList集合

ArrayList是集合中的一种,它支持索引

//        1.创建ArrayList集合的对象
        ArrayList list=new ArrayList();
//        2.添加数据
        list.add("Java");
        list.add("Java");
        list.add("赵敏");
        list.add(83);
        list.add(42.2);
        list.add(false);
        list.add(true);
        list.add('a');
        System.out.println(list);
        
//        3.给指定索引位置插入元素
        list.add(3,"张无忌");
        System.out.println(list);

java编程之面向对象3

ArrayList对于泛型的支持

泛型概述

ArrayList<E>:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型
举例:
ArrayList<String> : 此集合只能操作字符串类型的元素
ArrayList<Integer> :此集合只能操作整数类型的元素

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

		ArrayList<String> list=new ArrayList<>();
        list.add("Java");
        list.add("MySql");
        list.add("c");
        System.out.println(list);

ArrayList常用API

	ArrayList<String> list = new ArrayList<>();
        list.add("Java");
        list.add("PHP");
        list.add("Java");
        list.add("Python");
        list.add("MyBatis");
        list.add("C#");
        System.out.println("创建的集合为:"+list);

//        1.public int size():获取集合的大小(元素个数)
        System.out.println("集合的大小为:" + list.size());

//        2.public E get(int index):获取某个索引位置处的元素值
        System.out.println("集合中第四个元素为:"+list.get(3));

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

//        4.public E remove(int index):删除某个索引位置处的元素值,并返回被删除的元素值
        String four=list.remove(4);
        System.out.println(four);
        System.out.println(list);

//        5.public boolean remove(Object o):直接删除元素值,删除成功返回true,删除失败返回false
        System.out.println(list.remove("Java"));
        System.out.println(list);
        System.out.println(list.remove("C#"));
        System.out.println(list);

//        6.public E set(int index,E element):修改某个索引位置处的元素值
        list.set(0,"c++");
        System.out.println(list);

java编程之面向对象3

ArrayList 案例

遍历并删除元素值

需求

某个班级的考试在系统上进行,成绩大致为:98,77,66,89,79,50,100;现需要先把成绩低于80分以下的数据去掉

  1. 定义ArrayList集合存储多名学员的成绩
  2. 遍历集合每个元素,如果元素值低于80分,去掉它
        ArrayList<Integer> scores = new ArrayList<>();
        scores.add(98);
        scores.add(77);
        scores.add(66);
        scores.add(89);
        scores.add(79);
        scores.add(50);
        scores.add(100);
        System.out.println(scores);
     
//方法一:   
//        1.遍历集合中的每个元素
        for (int i = 0; i < scores.size(); i++) {
//            2.判断这个分数是否低于80分,如果低于则从集合中删除它
            if(scores.get(i)<80){
                scores.remove(i);
                i-=1;
            }
        }
        System.out.println(scores);

//方法二:
        //        1.遍历集合中的每个元素
        for (int i = scores.size()-1; i >=0; i--) {
            int sc=scores.get(i);
//            2.判断这个分数是否低于80分,如果低于则从集合中删除它
            if(sc<80){
                scores.remove(i);
            }
        }
        System.out.println(scores);

java编程之面向对象3

影片信息在程序中的表示

需求

某影院系统需要在后台存储上述三部电影,然后依次展示出来。

  1. 三部电影是3个对象,定义一个电影类,定义一个集合存储电影对象
  2. 创建3个电影对象,封装相关数据,把3个对象存入到集合中去。
//        1.定义一个电影类:Movie
//        2.定义一个ArrayList集合存储这些影片对象
        ArrayList<Movie> movies = new ArrayList<>();
        
//        3.创建影片对象封装电影数据,把对象加入到集合中去
        movies.add(new Movie("《肖申克的救赎》",9.7,"罗宾斯"));
        movies.add(new Movie("《霸王别姬》",9.6,"张国荣、张丰毅"));
        movies.add(new Movie("《阿甘正传》",9.5,"汤姆,汉克斯"));

//        4.遍历集合中的影片对象并展示出来
        for (int i = 0; i < movies.size(); i++) {
            Movie m=movies.get(i);
            System.out.println("片名:"+m.getName());
            System.out.println("评分:" + m.getScore());
            System.out.println("主演:" + m.getActor());
            System.out.println("---------------------------------");
        }
------------------------------------------------------------------
//movie类
class Movie{
    private String name;
    private double score;
    private String actor;

    public Movie() {
    }

    public Movie(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;
    }
}

java编程之面向对象3

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

学生信息系统的数据搜索

需求

后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能

  1. 定义Student类,定义ArrayList集合存储加上学生对象信息,并遍历展示出来
  2. 提供一个方法,可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生对象信息,并展示
  3. 使用死循环,让用户不停的搜索
public class Student {
    private int id;
    private String name;
    private int age;
    private String sclass;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    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 getSclass() {
        return sclass;
    }

    public void setSclass(String sclass) {
        this.sclass = sclass;
    }

    public Student(int id, String name, int age, String sclass) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sclass = sclass;
    }

    public Student() {
    }
}

----------------------------------------------------------------------------
public static void getStudent() {
//        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,"神经科2班"));

        System.out.println("学号\t\t姓名\t\t年龄\t\t班级");

//        3.遍历集合中的每个学生对象并展示其数据
        for (int i = 0; i < students.size(); i++) {
            Student s=students.get(i);
            System.out.println(s.getId()+"\t\t"+s.getName()+"\t\t"+s.getAge()+"\t\t"+s.getSclass());
        }

//        4.让用户不断的输入学号,可以搜索出该学生对象信息并展示出来(独立成方法)
        Scanner sc = new Scanner(System.in);
        while(true){
            System.out.println("请您输入要查询的学生的学号:");
            int id = sc.nextInt();
            Student s=getStudentByid(students,id);
//            判断学号是否存在
            if(s!=null){
//                找到该学生了,信息如下
                System.out.println(s.getId()+"\t\t"+s.getName()+"\t\t"+s.getAge()+"\t\t"+s.getSclass());
            }else{
                System.out.println("查无此人");
            }

        }

    }

    /**
     * 根据学号,去集合中找出学生对象并返回
     * @param students
     * @param id
     * @return
     */
    public static Student getStudentByid(ArrayList<Student> students,int id){
        for (int i = 0; i < students.size(); i++) {
            Student s=students.get(i);
            if(s.getId()==id){
                return s;
            }
        }
        return null;   //查无此学号

    }

java编程之面向对象3

上一篇:bgp作业2


下一篇:java-Stream流