> 文档中心 > Java——String、ArrayList

Java——String、ArrayList

文章目录

  • 1. String字符串
    • 1.1 String类概述、对象创建原理
    • 1.2 创建字符串对象的2种方式
    • 1.3 常见面试题
    • 1.4 常用API
    • 1.5 String案例
  • 2. ArrayList集合
    • 2.1 集合概述
    • 2.2 ArrayList集合的对象获取
    • 2.3 常用API
    • 2.3 ArrayList案例

1. String字符串

1.1 String类概述、对象创建原理

  • java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符
  • Java程序中的所有字符串文字(例如“abc”)都为此类的对象
  • String——不可变字符串类型,它的对象在创建后不能被更改:String变量每次的修改其实都是产生并指向了新的字符串对象,原来的字符串对象都是没有改变的

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

  • 方式一:直接使用" "定义。(推荐方式)
String name = "我爱中国";
  • 方式二:通过String类的构造器创建对象。
构造器 说明
public String() 创建一个空白字符串对象,不含有任何内容
public String(String original) 根据传入的字符串内容,来创建字符串对象
public String(char[] chs) 根据字符数组的内容,来创建字符串对象
public String(byte[] chs) 根据字节数组的内容,来创建字符串对象
//public String()    (几乎不用)String s1 = new String();System.out.println(s1);//public String(String original)     (几乎不用)String s2 = new String("我爱中国");//public String(char[] chs)char[] chars = {'a','b','c'};String s3 = new String(chars);System.out.println(s3);  //abc//`public String(byte[] chs)byte[] bytes = {97,98,99,65,66,67};String s4 = new String(bytes);System.out.println(s4);   //abcABC
  • 区别(面试常考):
    " " 方式给出的字符串对象在字符串常量池中存储,而且相同内容只会在其中存储一份;通过构造器new对象,每new一次都会产生一个新对象,放在堆内存
public static void main(String[] args) {String s1 = "abc";    String s2 = "abc";    System.out.println(s1 == s2);  //true    char[] chs = {'a','b','c'};    String s3 = new String(chs);    String s4 = new String(chs);    System.out.println(s3 == s4);   //false}

1.3 常见面试题

String常见面试题

String常见面试题

1.4 常用API

方法名 说明
public boolean equals (Object anObject) 将此字符串与指定对象进行比较,只关心字符内容是否一致
public boolean equalsIgnoreCase (String anotherString) 将此字符串与指定对象进行比较,忽略大小写
public int length() 返回此字符串的长度
public char charAt(int index) 获取某个索引位置处的字符
public char[] toCharArray() 将当前字符串转换成字符数组返回
public String substring(int beginIndex ,int endIndex) 根据开始和结束索引进行截取,得到新的字符串(包前不包后)
public String substring(int endIndex) 从传入的索引处截取,截取到末尾,得到新的字符串
public String replace(CharSequence target,CharSequence replacement) 使用新值将字符串中的旧值替换,得到新的字符串
public String[] split(String regex) 根据传入的规则切割字符串,得到字符串数组返回
public class Demo2 {    public static void main(String[] args) {    String sysCode = "23Ab";String code1 = "23ab";System.out.println(sysCode.equals(code1));      //falseSystem.out.println(sysCode.equalsIgnoreCase(code1));   //true String name = "我爱中国love"; System.out.println(name.length());     //8 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); } char[] chars = name.toCharArray(); System.out.println(chars);    //我爱中国love String name2 = "Java是最厉害的编程语言"; System.out.println(name2.substring(0, 9));  //Java是最厉害的 String rs2 = name2.substring(4); System.out.println(rs2);     //是最厉害的编程语言 String name3 = "fucking crazy"; String rs3 = name3.replace("fucking","***"); System.out.println(rs3);   //*** crazy System.out.println(name3.contains("fucking"));  //true System.out.println(name3.startsWith("fuck"));   //true System.out.println(name3.startsWith("fuci"));   //false String name4 = "语文,数学,英语"; String[] names = name4.split(","); System.out.println(names);//[Ljava.lang.String;@49e4cb85 for (int i = 0; i < names.length; i++) {     System.out.print(names[i]); //语文数学英语 }    }}

1.5 String案例

案例1
在这里插入图片描述

import java.util.Random;public class Demo3 {    public static void main(String[] args) { String datas = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"; 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; } System.out.println(code);    }}

案例2
在这里插入图片描述

import java.util.Scanner;public class Demo4 {    public static void main(String[] args) { String okLoginName = "cm"; String okPassword = "123456"; 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();     if(okLoginName.equals(loginName)){  if (okPassword.equals(password)){      System.out.println("登录成功!");      break;  }else{      System.out.println("登录密码错误,还剩余" + (3-i) +"次机会!");  }     }else{  System.out.println("登录名称错误,还剩余" + (3-i) + "次机会!");     } }    }}

案例3
在这里插入图片描述

import java.util.Scanner;public class Demo5 {    public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个手机号码:"); String tel = sc.next(); String before = tel.substring(0,3); String after = tel.substring(7); String s = before + "****" + after; System.out.println("屏蔽后的手机号码为:" + s);    }}

2. ArrayList集合

2.1 集合概述

  • 集合特点:
    集合的大小不固定,启动后可以动态变化,类型也可以选择不固定
    集合非常适合做元素个数不确定,且要进行增删操作的业务场景
    集合提供了许多丰富好用的功能,而数组功能单一
元素存储 适合场景
数组 类型确定,长度固定 数据个数和类型确定的场景
集合 类型可以不固定,大小可变 数据个数不确定、需要增删元素的场景

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

2.2 ArrayList集合的对象获取

构造器 说明
public ArrayList() 创建一个空的集合对象
  • ArrayList:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型
  • 举例:ArrayList只能操作字符串类型的元素;ArrayList只能操作整数类型的元素
  • 注意:集合中只能存储引用类型,不支持基本数据类型

2.3 常用API

添加元素的方法

方法名 说明
public boolean add(E e) 将指定的元素追加到此集合的末尾
public void add(int index,E element) 在此集合中的指定位置插入指定的元素
import java.util.ArrayList;public class Demo_1 {    public static void main(String[] args) { ArrayList<String> list1 = new ArrayList<>(); list1.add("csdkj"); list1.add("xvfv"); ArrayList<Integer> list2 = new ArrayList<>(); list2.add(354); list2.add(205); System.out.println(list1);   //[csdkj, xvfv] System.out.println(list2);   //[354, 205]    }}
方法名称 说明
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 Demo_1 {    public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("Java"); list.add("MySQL"); list.add("Java"); list.add("MyBatis"); list.add("HTML"); //public E get(int index) 返回指定索引处的元素 String a = list.get(3); System.out.println(a);  //MyBatis //public int size() 返回集合中的元素的个数 System.out.println(list.size());    //5 //遍历集合 for (int i = 0; i < list.size(); i++) {     System.out.println(list.get(i)); }  //Java  //MySQL  //Java  //MyBatis  //HTML //public E remove(int index)删除指定索引处的元素,返回被删除的元素 String b = list.remove(4); System.out.println(b);//HTML System.out.println(list);   //[Java, MySQL, Java, MyBatis] //public boolean remove(Object o) 删除指定的元素,返回删除是否成功 list.remove("MyBatis"); System.out.println(list);    //[Java, MySQL, Java] list.remove("Java"); //重复元素删除最前面的 System.out.println(list);   //[MySQL, Java] //public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素 String c = list.set(0,"cm"); System.out.println(c);      //MySQL System.out.println(list);   //[cm, Java]    }}

2.3 ArrayList案例

案例1
在这里插入图片描述

import java.util.ArrayList;public class Demo_2 {    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); /*方法1:从前往后删 for (int i = 0; i < scores.size(); i++) {     if(scores.get(i) < 80){  scores.remove(i);  i--;    //每次删除结束要退回一步     } }*///方法2:从后往前删 for (int i = scores.size() - 1; i >= 0 ; i--) {     if(scores.get(i) < 80){  scores.remove(i);     } }  System.out.println(scores);    }}

案例2
在这里插入图片描述

public 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;    }}
import java.util.ArrayList;public class Demo_3 {    public static void main(String[] args) { //1.定义电影类 //2.创建3个电影对象 Movie m1 = new Movie("《肖申克的救赎》",9.7,"罗宾斯"); Movie m2 = new Movie("《霸王别姬》",9.7,"张国荣、张丰毅"); 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++) {     Movie m = movies.get(i);     System.out.println("电影名称:" + m.getName());     System.out.println("电影评分:" + m.getScore());     System.out.println("电影主演:" + m.getActor());     System.out.println("-------------"); }    }}

案例3
在这里插入图片描述

package 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;public class Demo_4 {    public static void main(String[] args) { //1.定义学生类 //2.创建集合存储学生对象 ArrayList<Student> students = new ArrayList<>(); students.add(new Student("1001","张三",21,"信管一班")); students.add(new Student("2023","李四",19,"信管二班")); students.add(new Student("3019","赵五",20,"信管三班")); students.add(new Student("4021","陈二",23,"应统一班")); //3.遍历学生信息 System.out.println("学号\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();     //调用方法查询     Student s = getStudentById(students,studyNumber);     //判断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());     }     break; }    }    /**     * 根据学生学号查询学生对象返回     * @param students    存储全部学生对象的集合     * @param studyNumber  搜索的学生学号     * @return    学生对象/null     */    public static Student getStudentById(ArrayList<Student> students,String studyNumber){ //遍历全部学生对象 for (int i = 0; i < students.size(); i++) {     Student s = students.get(i);     if(s.getStudyNumber().equals(studyNumber)){  return s;     } } return null;    }}