Java-常用 API(String、ArrayList)

常用 API(String、ArrayList)

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

​ ● Java写好的技术(功能代码),可以直接调用.

​ ● Oracle 也为Java提供了这些功能代码和相关的API文档(技术使用说明书).

▼ 下载API文档网址

http://www.oracle.com/technetwork/java/javase/downloads/index.html

---------------------------------------------------------------------------------

String 简单介绍

​ ● String类定义的变量可以用于储存字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用.

> 关于 String 类学什么?

› String 定义变量储存字符串

◣需要知道如何创建字符串对象,并用String定义变量指向该字符串对象.

› String 的内存原理

◣字符串对象在内存中的原理是什么样.能够解决一些字符串的成绩面试题.

› String 类提供了哪些API

◣能够说出并使用String类提供的操作字符串的功能:遍历、替换、截取、相等、包含···

› String 解决实例

◣能够利用String的常用API去解决实际场景的业务需求,真正做到学以致用

◆ String 类概述

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

​ ● Java 查询中的所有字符串文字(例如:“abc”)都为此类的对象

> String 类的特点详解

● String起始常被称为不可改变字符串类型,它的对象在创建后不能被更改.

在这里插入图片描述

> String是不可变字符串的原因 :

​ ● String变量每次的修改其实都是产生并指向了类的字符串.

​ ● 原来的字符串对象都是没改变的,所以称不可变字符串.

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

> 方式一:总结使用 " " 定义.

String Word="文字";

> 方式二:通过String 类的构造器创建对象

构造器说明
public String()创建一个空白字符串对象,不含如何内容
public String(String original)根据传入的字符内容,来创建字符串对象
public String(char[] chs)根据字符组的内容,来创建字符串对象
public String(byte chs)根据字节数组的内容,来创建字符串对象
public class StringDemo1 {
    public static void main(String[] args) {
        //方式一: 直接使用双引号得到字符串对象
        String Word="文字";
        System.out.println(Word);

        //方式二:
        //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[] chars = {'a','b','中','国'};
        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);
    }
}

在这里插入图片描述

◆ String 类创建面试题

> 有什么区别吗?(面试参考)

● 以 " " 方法给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份.

在这里插入图片描述

● 通过构造器new 对象,每new 一次都会产生一个新对象,放在堆内存中.

在这里插入图片描述

public class StringDemo1 {
    public static void main(String[] args) {
        String ss1 = "abc";
        String ss2 = "abc";
        System.out.println(ss1 == ss2);

        char[] char1 = {'a','b','c'};
        String ss3 = new String(char1);
        String ss4 = new String(char1);
        System.out.println(ss3 == ss4);
    }
} 

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

● 使用 ‘==’ 比较的的是地址 (比对基本数据类型)

● 使用 ‘equals’ 比较的的是内容 (比对引用数据类型)

● 使用 'equalsIgnoreCase ’ 忽略大小写进行比较的的是内容 (比对引用数据类型)

方法名说明
public bool equals (Object anObject)将次字符串与指定对象进行比较.只关心内容是否一致
public bool equalsIgnoreCase (String anotherString)将次字符串与指定对象进行比较.忽略大小写进行比较
import java.util.Scanner;
public class StringDemo2 {
    public static void main(String[] args) {
        //成员变量
        String Name = "用户";
        String Pwd = "123456";

        //接收值
        Scanner input = new Scanner(System.in);
        System.out.print("请输入用户名: ");
        String name = input.next();
        System.out.print("请输入密码: ");
        String pwd = input.next();
        
        //与成员变量比对接收值
        System.out.println("------此处使用的是 '==' 进行的比对-----");
        if(name == Name && pwd == Pwd){
            System.out.println("正确");
        }else {
            System.out.println("错误");
        }
        System.out.println("------此处使用的是 '.equals(比对值)' 进行的比对-----");
        if(name.equals(Name) && pwd.equals(Pwd)){
            System.out.println("正确");
        }else {
            System.out.println("错误");
        }
    }
}

在这里插入图片描述

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

● 常用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 StringAPIOtherDemo3 {
    public static void main(String[] args) {
        //1.public int length(): 获取字符串的长度
        String word = "我爱祖国Love";
        System.out.println(word.length());
        
        //2.public char charAt(int index): 获取某个索引位置处的字符
        char c=word.charAt(4);
        System.out.println(c);

        System.out.println("----------遍历字符串中的每个字符--------");
        for (int i=0; i<word.length(); i++) {
            char cr = word.charAt(i);
            System.out.println(cr);
        }
        
        //3.public char[ ] toCharArray(): 把字符串换成字符数组
        char[] ar=word.toCharArray();
        System.out.println();
        for (int i=0; i<ar.length; i++){
            char ch=ar[i];
            System.out.println(ch);
        }
       
        //4.public String substring(int beginIndex, int endIndex): 截取内容,包前不包后
        String name = "Java是世界最厉害的语言";
        String rs1 = name.substring(0,9);
        System.out.println(rs1);
        String rs2 = name.substring(5,10);
        System.out.println(rs2);
        
        //5.public String substring(int beginIndex): 从当前索引一直截取到末尾
        String rs3 = name.substring(4);
        System.out.println(rs3);
        
        //6.public String replace(charSequence target,charSequence replacement): 比对文字,并替换
        String name2 = "张三厉害,张三狂徒.";
        String rs4 = name2.replace("张三","**");
        System.out.println(rs4);
        
        //7.public Boolean contains(CharSequence s): 比对当前成员变量中是否存在该变量
        System.out.println(name2.contains("张三"));
        System.out.println(name2.contains("张三"));
        
        //8.public Boolean startsWithstand(String prefix): 比对是否为当前成员变量的开头
        System.out.println(name.startsWith("张三"));
        System.out.println(name.startsWith("张三厉害"));
        System.out.println(name.startsWith("张三棒棒"));
        
        //9.public String[ ] split(String s):搜索某个内容把字符串分割成字符串数组返回
        String name3 = "张三,李四,王五";
        String[] names = name3.split(",");
        for (int i=0; i<names.length; i++){
            System.out.println("选择了:"+names[i]);
        }
    }
}

在这里插入图片描述

◆ String 类实例

● 实现随机生成验证码

import java.util.Random;
/* 使用String完成随机5位数的验证码 */
public class StringCode {
    public static void main(String[] args) {
        //1.定义可取的字符范围
        String verification = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        //2.利用 For 循环5次,每次循环从 verification 变量中随机取走一个字符
        Random random=new Random();
        String Code="";
        for (int i=0; i<5; i++){
            //按verification变量的长度随机生成一个数
            int index = random.nextInt(verification.length());
            //利用public char charAt(int index): 获取某个索引(index)位置处的字符
            char c = verification.charAt(index);
            //将获取到的随机值连起来通过Code接收
            Code += c;
        }
        System.out.println(Code);
    }
}

● 模拟用户登录

import java.util.Scanner;
/*
  模拟用户登录,3次重新登录机会
 */
public class StringLogin {
    public static void main(String[] args) {
        //成员变量
        String Name = "用户";
        String Pwd = "123456";
        //接收用户输入信息
        Scanner input = new Scanner(System.in);
        for (int i=0; i<3;i++){
            System.out.print("请输入用户名: ");
            String name=input.next();
            System.out.print("请输入密码: ");
            String pwd=input.next();

            if (name.equals(Name)){
                if (pwd.equals(Pwd)){
                    System.out.println("登录成功");
                    break;
                }else {
                    System.out.println("密码输入错误,请重新输入.你还有"+(2-i)+"机会");
                }
            }else {
                System.out.println("用户名错误,请重新输入,你还有"+(2-i)+"机会");
            }
        }

    }
}

● 手机号码屏蔽

import java.util.Scanner;
/* 接收号码,并替换号码 */
public class StringPhone {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入你的电话号码: ");
        String Phone=input.next();
        String s=Phone.substring(3,9);
        String Replace=Phone.replace(s,"******");
        System.out.println("你的电话为: "+Replace);

    }
}

---------------------------------------------------------------------------------

ArrayList 简单介绍

​ ● ArrayList 代表的是集合类,集合是一种容器,不同的是集合的大小是不固定的.

​ ● 通过ArrayList 的对象代表得到一个集合容器,同时ArrayList 提供了比数组更好用,更丰富的API(功能)给程序员使用.

> 关于 ArrayList 类学什么?

› ArrayList 集合如何创建对象

◣要知道如何利用ArrayList 创建对象代表集合容器来存放数据.

› ArrayList 常用API

◣能够说出并使用ArrayList 类提供的丰富的元素操作的功能:添加、获取、删除、修改等功能.

› ArrayList 存储自定义对象

◣能够使用ArrayList存储自定义的对象,并清楚ArrayList 集合存储对象的底层原理.

› ArrayList 解决实例

◣能够使用ArrayList 存储对象,并完成数据搜索,删除···创建业务需求.

◆ ArrayList 集合概述

● 数组的特点

​ 数组定义完成并启动后,类型确定、长度固定.

​ 数组适合用于数据个数和类型确定的场景

● 集合的特点

​ 集合类型可以不固定,大小是可变

​ 集合适合数据个数不确定,且要做增删改查元素的场景

◆ ArrayList 集合快速入门

● ArrayList集合

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

● ArrayList集合的对象获取

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

● ArrayList集合添加元素的方法

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

public class ArrayListDemo1 {
    public static void main(String[] args) {
        //1.创建ArrayList集合对象
        ArrayList list = new ArrayList();
        //2.添加数据
        list.add(120);
        list.add(9.8);
        list.add("Java");
        list.add('中');
        list.add("集合中可以添加各种类型的数据");
        System.out.println(list);
        //3.向指定位置添加数据
        list.add(1,"hollow");
        System.out.println(list);
    }
}

在这里插入图片描述

◆ ArrayList 对泛型的支持

● 泛型概述

​ ArrayList: 起始就是一个泛型类,可以在编译阶段约束集合只能操作某种数据类型.

● 案例

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

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

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

------代码展示-------
import java.util.ArrayList;
/* 目标: 能够使用ArrayList集合操作的数据类型 */
public class ArrayListDemo2 {
    public static void main(String[] args) {
        ArrayList<Object> listObject=new ArrayList<>();         //支持所有的类型
        listObject.add(120);
        listObject.add(9.8);
        listObject.add("Java");
        listObject.add('中');
        listObject.add("集合中可以添加各种类型的数据");
        ArrayList<String> listString1=new ArrayList<String>();  //只支持String类型
        ArrayList<String> listString2=new ArrayList<>();        //从JDK 1.7开始,泛型后面的类型声明可以不写
        //listString2.add(120);
        //listString2.add(9.8);
        listString2.add("Java");
        listString2.add("集合中只支持String类型的数据");
        ArrayList<Integer> listInteger=new ArrayList<>();       //只支持String类型
        listInteger.add(120);
        //listInteger.add(9.8);
        //listInteger.add("Java");
    }
}

◆ ArrayList 常用API - 遍历

● 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 ArrayListDemo3 {
    public static void main(String[] args) {
        ArrayList<String> listString=new ArrayList<>();
        listString.add("Java");
        listString.add("Java");
        listString.add("MySQL");
        listString.add("HTML");
        listString.add("MyBatis");
        //1.public E get(int index): 获取某个索引位置处的元素值
        String e = listString.get(3);
        System.out.println(e);
        //2.public int size(): 获取集合的大小(元素个数)
        System.out.println(listString.size());
        //3.完成集合的遍历
        for (int i=0; i<listString.size(); i++){
            System.out.println(listString.get(i));
        }
        /* for (String s : listString) { System.out.println(s); } */
        //4.public E remove(int index): 删除指定索引处的元素,返回被删除的元素
        System.out.println(listString);
        String e2 = listString.remove(2);
        System.out.println(e2);
        System.out.println(listString);
        //5.public boolean remove(Object o): 直接删除元素值,删除成功返回true,删除失败返回false
        listString.remove("Java");
        System.out.println(listString);
        //6.public E set(int index,E element): 修改指定索引处的元素,返回被修改的元素
        String e3 = listString.set(2,"MySql");
        System.out.println(e3);
        System.out.println(listString);
    }
}

在这里插入图片描述

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

import java.util.ArrayList;
/* 目标:学习遍历删除元素的正确方案 */
public class ArratListDemo4 {
    public static void main(String[] args) {
        ArrayList<Integer> listInteger = new ArrayList<>();
        listInteger.add(79);
        listInteger.add(87);
        listInteger.add(100);
        listInteger.add(97);
        listInteger.add(73);
        listInteger.add(80);
        System.out.println(listInteger);

        for (int i=0; i<listInteger.size(); i++){
            int score = listInteger.get(i); //将索引值暂时存储在score中
            if (score>=80){
                System.out.println(score);
            }else {
                listInteger.remove(i);
                i--;                        //删除成功后,必须退一步,这样可以保证下次回到这个位置,如此不会跳过数据
            }
        }

        //重后面到这删除就可以
        for (int i = listInteger.size()-1; i >=0 ; i--) {
            int score = listInteger.get(i);
            if (score>=80){
                System.out.println(score);
            }else {
                listInteger.remove(i);
            }
        }

    }
}

在这里插入图片描述

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

在这里插入图片描述

/* 电影类 */
public class Movie {
    //成员变量
    private String File;
    private double Score;
    private String Name;

    //构造
    public Movie() { }
    public Movie(String file, double score, String name) { File = file; Score = score; Name = name; }

    //封装
    public String getFile() { return File; }
    public void setFile(String file) { File = file; }

    public double getScore() { return Score; }
    public void setScore(double score) { Score = score; }

    public String getName() { return Name; }
    public void setName(String name) { Name = name; }
}
import cn.ObjectOriental.MoviesShow.Movie;
import java.util.ArrayList;
/*
方法1:
 需求:定义电影类(名称、分值、演员),创建三个电影对象,代表影片,插入集合中遍历
    "《长津湖》",9.8,"吴京"
    "《我和我的父辈》",9.6,"吴京"
    "《扑水少年》",9.5,"王川"
 */
public class ArrayListDemo5 {
    public static void main(String[] args) {
        /*1.定义电影类Movie*/
        /*2.创建3个电影对象*/
        Movie m1 = new Movie("《长津湖》",9.8,"吴京");
        Movie m2 = new Movie("《我和我的父辈》",9.6,"吴京");
        Movie m3 = new Movie("《扑水少年》",9.5,"王川");
        /*3.创建一个电影对象的ArrayList集合,并存储电影对象*/
        ArrayList<Movie> list = new ArrayList<>();
        list.add(m1);
        list.add(m2);
        list.add(m3);
        System.out.println(list);  //此时list集合中存储的是指向电影对象的地址
        /*4.遍历电影类型的集合中的每一个对象.访问它的信息即可*/
        for (int i = 0; i < list.size(); i++) {
            Movie m = list.get(i); //定义对象来接它遍历对象的地址
            System.out.println("电影名称: "+m.getFile());
            System.out.println("电影评分: "+m.getScore());
            System.out.println("电影主演: "+m.getName());
        }
    }
}
import cn.ObjectOriental.MoviesShow.Movie;
import java.util.ArrayList;
/*
方法2:使用匿名对象
 需求:定义电影类(名称、分值、演员),创建三个电影对象,代表影片,插入集合中遍历
    "《长津湖》",9.8,"吴京"
    "《我和我的父辈》",9.6,"吴京"
    "《扑水少年》",9.5,"王川"
 */
public class ArrayListDemo5 {
    public static void main(String[] args) {
        /*1.定义电影类Movie*/
        /*2.创建3个电影对象*/
        /*3.创建一个电影对象的ArrayList集合,并存储电影对象*/
        ArrayList<Movie> list = new ArrayList<>();
        list.add(new Movie("《长津湖》",9.8,"吴京"););
        list.add(new Movie("《我和我的父辈》",9.6,"吴京"););
        list.add(new Movie("《扑水少年》",9.5,"王川"););
        System.out.println(list);  //此时list集合中存储的是指向电影对象的地址
        /*4.遍历电影类型的集合中的每一个对象.访问它的信息即可*/
        for (int i = 0; i < list.size(); i++) {
            Movie m = list.get(i); //定义对象来接它遍历对象的地址
            System.out.println("电影名称: "+m.getFile());
            System.out.println("电影评分: "+m.getScore());
            System.out.println("电影主演: "+m.getName());
        }
    }
}

在这里插入图片描述

◆ ArrayList 集合案例:元素搜索

public class Student {
    private String studyNumber;     //学号
    private String name;            //姓名
    private int age;                //年龄
    private String className;       //教室

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

    public String getStudyNumber() { return studyNumber; }
    public void setStudyNumber(String studyNumber) { this.studyNumber = studyNumber; }

    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; }
}
import java.util.ArrayList;
import java.util.Scanner;
/* 案例:学生信息系统,显示数据,并按照学号完成搜索学生类信息
*  测试数据:
*  "BI035gEYy","一叶孤城",22,"推理一班"
*  "wqA90HQpU","东方延绪",26,"中医学四班"
*  "0uzRxJv6o","西门吹雪",24,"法医系三班"
*  "bUQqiml3Z","东梅超风",21,"精神科五班"
*  "Uo7Hbykpb","西方不败",27,"修理学二班" */
public class ArrayListStudent {
    public static void main(String[] args) {
        //1.创建学生类
        //2.创建学生对象封装学生对象
        //把学生对象添加到集合中去
        ArrayList<Student> liststudent = new ArrayList<>();
        liststudent.add(new Student("BI035gEYy","一叶孤城",22,"推理一班" ));
        liststudent.add(new Student("wqA90HQpU","东方延绪",26,"中医学四班"));
        liststudent.add(new Student("0uzRxJv6o","西门吹雪",24,"法医系三班"));
        liststudent.add(new Student("bUQqiml3Z","东梅超风",21,"精神科五班"));
        liststudent.add(new Student("Uo7Hbykpb","西方不败",27,"修理学二班"));
        //3.遍历变量集合中的每个信息并打印
        System.out.println("学号"+"\t\t\t"+"姓名: "+"\t\t"+"年龄: "+"\t"+"班级: ");
        for (int i = 0; i < liststudent.size(); i++) {
            Student s = liststudent.get(i);
            System.out.println(s.getStudyNumber()+"\t"+s.getName()+"\t\t"+s.getAge()+"\t\t"+s.getClassName());
        }
        //4.定义方法按照学号查询学员信息
        Scanner input=new Scanner(System.in);
        while (true){
            System.out.print("请输入学号查询对象: ");
            String studyNumber = input.next();
            //5.调用方法查询
            Student s = getStudyId(liststudent,studyNumber);
            //6.判断s中是否存在学生地址
            if(s == null){
                System.out.println("对不起,查无此人( ̄▽ ̄)~*");
            }else {
                System.out.println("你查询的学生信息如下:");
                System.out.println("学号"+"\t\t\t"+"姓名: "+"\t\t"+"年龄: "+"\t"+"班级: ");
                System.out.println(s.getStudyNumber()+"\t"+s.getName()+"\t\t"+s.getAge()+"\t\t"+s.getClassName()+"\n");
            }
        }
    }
    /* 根据学生的学号查询学生对象返回
    * @param students 存储全部学生对象的集合
    * @param studyNumber 搜索的学生对象的集合
    * @return 学生对象 | null
    * */
    public static Student getStudyId(ArrayList<Student> liststudent,String studyNumber){
        //1.遍历全部学生对象
        for (int i = 0; i < liststudent.size(); i++) {
            Student s = liststudent.get(i);
            //2.询问当前遍历的这个学生的学号:是否我们要找的学号
            if(s.getStudyNumber().equals(studyNumber)){
                //这个s代表的学生对象,就是我们要找的,返回它
                return s;
            }
        }
        //查无此人
        return null;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值