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 常见面试题
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; }}