常用API(String、ArrayList)

API(应用程序接口)
Java写好的技术(功能代码),可以直接调用
String概述
    java.lang.String类代表字符串,String类定义的变量可以用于
    指向字符串对象,然后操作该字符串
    Java程序中的所有字符串文字(例如:“abc”)都为此类的对象
String类的特点详解
    String其实常被称为不可变字符串类型,它的对象在创建后不能被更改
public class Test {
    public static void main(String[] args) {
        String ch = "早上";
        ch += "中午";
        ch += "晚上";
        System.out.println(ch);//早上中午晚上
    }
}
从上述代码可以看出字符串变量ch指向的字符串对象,为何还要说字符串不可变呢?
字符串对象存在哪里?
    以""方式给出的字符串对象,在字符串常量池中存储
String不可变字符串的原因?
    String变量每次的修改其实都是产生并指向了新的字符串对象
    原来的字符串对象都是没有改变的,所以称为不可变字符串

创建字符串对象的两种方式
    方式一:直接使用""定义(推荐方式)
    String name = "紫霞";
    方式二:通过String类的构造器创建对象
构造器说明    
public String()创建一个空白字符对象,不含任何内容
public String(String original)根据传入的字符内串容,来创建字符串对象
public String(char[ ] ch)根据字符数组的内容,来创建字符串对象
public String(bytr[ ] ch)根据字节数组的内容,来创建字符串对象

public class Test {
    public static void main(String[] args) {
        //方式一
        String name = "我爱你中国!";
        System.out.println(name);

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

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

        //3、public String(char[] c ):根据字符数组内容,来创建字符串对象
        char[] ch = {'a', 'b', 'c'};
        String s3 = new String(ch);
        System.out.println(s3);//abc

        //4、public String(byte[] b):根据字节数组的内容,来创建字符串对象
        byte[] b = {65, 66, 67};
        String s4 = new String(b);
        System.out.println(s4);//ABC
    }
}
这几种方式有何区别?
    以""方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份
    通过构造器new对象,没new一次都会产生一个新对象,放在堆内存中

package com.deng.hello;

public class Test {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1 == s2);//true

        char[] ch = {'a', 'b', 'c'};
        String s3 = new String(ch);
        String s4 = new String(ch);
        System.out.println(s3 == s4);//FALSE
    }
}

String类字符串的内容比较:
    推荐使用String类提供的“equals”比较:只关心内容一样即可

方法名说明
public boolean equals(object anObject)将此字符串与指定对象进行比较,只关心字符内容是否一致
public boolean equalsIgnoreCase(String  antherString)将此字符串与指定对象进行比较,忽略大小写比较字符串,只关心字符内容是否一致
//登录验证

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //1、正确登录账户和密码
        String userName = "Java";
        String passWord = "123456";

        //2、请输入登录账户和密码
        Scanner sc = new Scanner(System.in);
        System.out.println("登录账户:");
        String userNames = sc.next();
        System.out.println("账户密码:");
        String passWords = sc.next();

        //3、字符串比较是否一致
        if (userName.equals(userNames) && passWord.equals(passWords)) {
            System.out.println("登录成功!");
        } else {
            System.out.println("用户名或密码错误!");
        }
    }
}
//忽略大小写比较内容,一般用于验证码这样的业务逻辑
public class Test {
    public static void main(String[] args) {
        String Code = "7Ac3Bf";
        String Code1 = "7aC3bf";
        System.out.println(Code.equals(Code1));//false
        System.out.println(Code.equalsIgnoreCase(Code1));//true
    }
}

 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 boolean contains(charSequence s)判断字符串里是否包含某个字符串
public boolean startsWith(String prefix)判断是否以某个字符串开始

public class Test {
    public static void main(String[] args) {
        //1、public int length()  返回此字符串的长度
        System.out.println("------------返回字符串长度--------------");
        String name = "我爱你中国";
        System.out.println(name.length());//5

        //2、public char charAt(int index)	获取某个索引位置处的字符
        System.out.println("------------获取某个索引位置的字符-----------");
        char c = name.charAt(1);
        System.out.println(c);//爱
        System.out.println("----------遍历输出字符串----------");
        for (int i = 0; i < name.length(); i++) {
            System.out.println(name.charAt(i));
        }

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

        //4、public String substring(int beginIndex,int endIndex)	根据开始和结束索引进行截取,得到新的字符串(包前不包后)
        System.out.println("-----------根据开始和结束索引的位置进行截取-----------");
        System.out.println(name.substring(1, 3));

        //5、public String substring(int beginIndex)	从传入的索引处截取,截取到尾部,得到新的字符串
        System.out.println("------从当前索引截取到最后-------");
        System.out.println(name.substring(3));

        //6、public String replace(charSequence target,charSequence replacement)	使用新值,将字符中的旧值替换,得到新的字符串
        System.out.println("----------字符替换----------");
        String name1 = "你实在是太厉害了,棒棒哒!";
        System.out.println(name1.replace("棒棒哒", "***"));
        //7、public boolean contains(charSequence s)	判断字符串里是否包含某个字符串
        System.out.println("------------判断字符串里是否包含某个字符串--------------");
        System.out.println(name.contains("中国"));//ture
        System.out.println(name.contains("中山"));//false

        //8、public boolean startsWith(String prefix)	判断是否以某个字符串开始
        System.out.println("-----------判断是否以某个字符串开始------------");
        System.out.println(name.startsWith("我爱你"));//true
        System.out.println(name.startsWith("我爱"));//true
        System.out.println(name.startsWith("我爱1"));//false

        //9、public String[] split(String regex)	根据传入的规则切割字符串,得到字符串数组返回
        System.out.println("-----------根据字符切割返回字符数组-----------");
        String name3 = "小明、小红、小刚、小美、小帅";
        String[] s = name3.split("、");
        for (int i = 0; i < s.length; i++) {
            System.out.println(s[i]);
        }
    }
}

String案例


import java.util.Random;

public class Test {
    public static void main(String[] args) {
        //String类开发验证码功能
        //随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母

        //定义成一个字符串
        String stringNum = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

        Random r = new Random();//随机数对象
        System.out.println("验证码:");
        //生成5个验证码
        String code = "";
        for (int i = 1; i <=5; i++) {
            int index = r.nextInt(stringNum.length());
            //System.out.print(stringNum.charAt(index));
            char c = stringNum.charAt(index);
            code += c;
        }
        System.out.println(code);
    }
}

用户登录

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //模拟用户登录,只给3次机会
        //1、先定义正午的的用户名和密码
        String okName = "sweet";
        String okPassword = "123456";

        //2、接收用户的登录信息
        Scanner sc = new Scanner(System.in);

        //3、3次容错机会
        for (int i = 1; i <= 3; i++) {
            System.out.println("账号:");
            String name = sc.next();//用户名
            System.out.println("密码:");
            String password = sc.next();//登录密码
            if (okName.equals(name)) {
                if (okPassword.equals(password)) {
                    System.out.println("登录成功!");
                } else {
                    System.out.println("密码错误,还剩" + (3 - i) + "次机会");
                }
            } else {
                System.out.println("账号错误,还剩" + (3 - i) + "次机会");
            }
        }
    }
}

手机号码屏蔽


import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //手机号码屏蔽
        //例:135****8764
        Scanner sc = new Scanner(System.in);
        System.out.println("手机号码:");
        String tel = sc.next();

        //截取需要屏蔽的4位
        String num = tel.substring(3, 7);

        //将需要屏蔽的4位进行替换
        System.out.println(tel.replace(num, "****"));
    }
}
集合的特点
    1、集合的大小不固定,启动后可以动态变化,类型也可以选择不固定
    2、集合非常适合做元素个数不确定,且要进行增删操作的业务场景
    3、集合的提供了许多丰富、好用的功能,而数组的功能很单一
数组和集合的元素存储个数问题?
    数组定义后类型确定,长度固定
    集合类型可以不固定,大小是可变的
数组和集合适用的场景?
    数组适合做数据个数和类型确定的场景
    集合适合做数据个数不确定,且要做增删元素的场景
ArrayList是集合中的一种,它支持索引

ArrayList集合的对象获取

构造器说明
public ArrayList()

创建一个空的集合对象

ArrayList集合添加元素的方法

方法名说明
public boolean add(E e)将指定的元素追加到此集合的末尾
public void add(int index,E element)在此集合中的指定位置插入指定的元素
import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        //创建ArrayList对象,代表集合容器,往里面添加元素
        //1、创建ArrayList集合的对象
        ArrayList list = new ArrayList();

        //2、添加元素
        list.add("java");
        list.add("python");
        list.add("MySQL");
        list.add(11);
        list.add(0.4);
        list.add(false);

        System.out.println(list);
        //3、按指定索引位置插入元素
        list.add(0, "C语言");
        System.out.println(list);
    }
}

ArrayList类如何创建集合对象的,如何添加元素?
    ArrayList list = new ArrayList();
    public boolean add(E e)
    public void add(int index,E element)
泛型概述
ArrayList<E>:其实是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型
举例:
    ArrayList<String>:此集合只能操作字符串类型的元素
    ArrayList<Integer>:此集合只能操作整数型的元素
注意:集合中只能存储引用类型,不支持基本数据类型

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        //ArrayList<String> list = new ArrayList<String>();
        ArrayList<String> list = new ArrayList<>();//JDK1.7开始,泛型后面的类型个声明可以不写
        list.add("Java");
        list.add("python");

        ArrayList<Integer> list1 = new ArrayList<>();
        list1.add(22);
    }
}

ArrayList集合常用方法

方法名称说明
public E get(int index)返回指定索引处的元素
public int size()返回集合中的元素个数
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public boolean remove(Object o)删除指定元素,返回删除是否成功
public E set(int index,E element)修改指定索引处的元素,返回被修改的元素

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<>();
        list.add("Java");
        list.add("python");
        list.add("Java");
        list.add("MySQL");
        list.add("HTML");
        list.add("C语言");

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

        //2、public int size()	返回集合中的元素个数
        System.out.println("----------返回集合中的元素个数---------");
        int arrSize = list.size();
        System.out.println(arrSize);//6

        //3、遍历集合元素
        System.out.println("------遍历输出集合元素------");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));//遍历输出集合元素
        }

        //4、public E remove(int index)	删除指定索引处的元素,返回被删除的元素
        System.out.println("--------删除指定索引处的元素,返回被删除的元素-------");
        System.out.println(list.remove(3));
        System.out.println(list);


        //5、public boolean remove(Object o)	删除指定元素,返回删除是否成功
        System.out.println("--------删除指定元素,返回删除是否成功---------");
        System.out.println(list.remove("Java"));//集合里的数据有重复时,先删除前面的元素
        System.out.println(list);


        //6、public E set(int index,E element)	修改指定索引处的元素,返回被修改的元素
        System.out.println("-------修改指定索引处的元素,返回被修改的元素--------");
        System.out.println(list.set(0, "c"));
        System.out.println(list);
    }
}
案例:遍历并删除元素值
需求:
    某个班级的考试在系统上进行,成绩大致为:98,77,66,89,79,50,100
    现在需要先把成绩80分以下的数据去掉
分析:
    定义ArrayList集合存储多名学生成绩
    遍历集合中每个元素,将低于80分的成绩删除
import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        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);
        //[98,77,66,89,79,50,100]

        //遍历集合中的每一个元素,删除小于80分的元素
        for (int i = scores.size() - 1; i >= 0; i--) {
            int score = scores.get(i);
            if (score < 80) {
                scores.remove(i);
            }
        }
        System.out.println(scores);
    }
}
案例:影片信息在程序中的表示
需求:某电影院系统需要在后台存储上述三部电影,然后一次展示出来
分析:
三部电影是3个对象,定义一个电影类,定义一个集合存储电影对象
创建3个电影对象,封装相关数据,把3个对象存入集合

public class Movie {
    private String movieName;
    private double score;
    private String actor;

    public Movie() {
    }

    public Movie(String movieName, double score, String actor) {
        this.movieName = movieName;
        this.score = score;
        this.actor = actor;
    }

    public String getMovieName() {
        return movieName;
    }

    public void setMovieName(String movieName) {
        this.movieName = movieName;
    }

    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;
    }
}

 


import java.util.ArrayList;

//《肖申克的救赎》,9.7,罗宾斯
//《霸王别姬》,9.6,张国荣,张丰毅
//《阿甘正传》,9.5,汤姆,汉克斯
public class Test {
    public static void main(String[] args) {
        //定义对象集合
        ArrayList<Movie> movies = new ArrayList<>();

        //创建影片对象封装成电影数据,把对象放进集合
        //Movie m1 = new Movie("《肖申克的救赎》",9.7,"罗宾斯");
        //movies.add(m1);
        movies.add(new Movie("《肖申克的救赎》", 9.7, "罗宾斯"));
        movies.add(new Movie("《霸王别姬》", 9.6, "张国荣、张丰毅"));
        movies.add(new Movie("《肖申克的救赎》", 9.5, "汤姆、汉克斯"));

        //遍历集合中的对象输出
        for (int i = 0; i < movies.size(); i++) {
            Movie movie = movies.get(i);
            System.out.println("片名:" + movie.getMovieName());
            System.out.println("评分:" + movie.getScore());
            System.out.println("主演:" + movie.getActor());
        }
    }
}

学生信息系统的数据搜索

学号姓名年龄班级
20220001叶孤城24计算机1班
20220002东风不败23计算机2班
20220003西门吹雪25计算机3班
20220004梅超风26计算机4班

需求:后台程序存储以上学生信息并展示,然后要提供按照学号搜索学生信息的功能
分析:
    定义Student类,定义ArrayList集合存储学生对象信息系,并遍历展现出来
    提供一个方法,接收ArrayList集合和学号,返回该学号的学生信息并展现出来

public class Student {
    private String studentId;//学号
    private String studentName;//姓名
    private int age;//年龄
    private String className;//班级

    public Student() {
    }

    public Student(String studentId, String studentName, int age, String className) {
        this.studentId = studentId;
        this.studentName = studentName;
        this.age = age;
        this.className = className;
    }

    public String getStudentId() {
        return studentId;
    }

    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    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;
    }
}
import java.util.ArrayList;
import java.util.Scanner;


public class Test {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<Student> students = new ArrayList<>();

        //将学生信息存入集合
        students.add(new Student("20220001", "叶孤城", 24, "计算机1班"));
        students.add(new Student("20220002", "东方不败", 23, "计算机2班"));
        students.add(new Student("20220003", "西门吹雪", 26, "计算机3班"));
        students.add(new Student("20220004", "梅超风", 26, "计算机4班"));

        //展现学生信息
        System.out.println("学号\t\t\t\t姓名\t\t\t\t年龄\t\t\t\t班级");
        for (int i = 0; i < students.size(); i++) {
            Student student = students.get(i);//将对象集合的地址给学生类对象
            System.out.println(student.getStudentId() + "\t\t" + student.getStudentName() + "\t\t\t" + student.getAge() + "\t\t\t\t" + student.getClassName());
        }

        //创建一个方法,接收ArrayList集合和学号,返回该学号的学生信息并展现出来
        System.out.println("请输入要查询学生信息的学号:");
        Scanner sc = new Scanner(System.in);
        String id = sc.next();
        Student student = getStudent(students, id);

        if (student == null) {
            System.out.println("查无此人!");
        } else {
            System.out.println(student.getStudentId() + "\t\t" + student.getStudentName() + "\t\t\t" + student.getAge() + "\t\t\t\t" + student.getClassName());
        }
    }

    //返回对应的学生信息的集合对象
    public static Student getStudent(ArrayList<Student> students, String Id) {
        //遍历集合里的每个学生对象
        for (int i = 0; i < students.size(); i++) {
            Student student = students.get(i);
            //判断此时学生对象里的学号与查询学号是否一致
            if (student.getStudentId().equals(Id)) {
                return student;//返回学生对象
            }
        }
        return null;//查无此人!
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值