自学Java(day7)
一.String类概述
-
java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。
-
Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。
-
String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。
-
字符串对象在字符串常量池中存储,以""方式给出的字符串对象。
- String是什么,可以做什么?
-
字符串类型,可以定义字符串变量指向字符串对象。
2.String是不可变字符串的原因?
-
String变量每次的修改其实都是产生并指向了新的字符串对象。
-
原来的字符串对象都是没有改变的,所以称不可变字符串。
二.String类的常用API-字符串内容比较
1.字符串的内容比较
- 字符串的内容比较不适合用"=="比较。
方法名 | 说明 |
---|---|
public boolean equals (Object anObject) | 将此字符串与指定对象进行比较。只关心字符内容是否一致! |
public boolean equalsIgnoreCase (String anotherString) | 将此字符串与指定对象进行比较,忽略大小写比较字符串。只关心字符内容是否一致! |
- 只关心内容是否一样就使用String提供的equals方法
- 基本数据类型比较是一般使用“==”。
2.案例
public class StringEqualsDemo {
public static void main(String[] args) {
//1.正确登陆名和密码
String okName = "张飞";
String okPassword = "123456";
//2.输入登陆名称和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入登陆名:");
String name = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
//3.判断用户输入的登陆名称和密码是否正确
if(okName.equals(name) && okPassword.equals(password)){
System.out.println("登陆成功!欢迎您回来哟");
}else {
System.out.println("你输入的登录名或者密码有误!请重新输入哦");
}
//4.忽略内容大小写比较内容的api;一般用于比较验证码这样的逻辑业务
String code1 = "1WeQr2";
String code2 = "1wEqR2";
System.out.println(code1.equals(code2));//flase
System.out.println(code1.equalsIgnoreCase(code2));//ture
}
}
三.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 class StringAPIOtherDemo {
public static void main(String[] args) {
// 1. public int length() 返回此字符串的长度
String s = "突然好想你,五月天";
System.out.println(s.length());
// 2. public char charAt(int index) 获取某个索引位置处的字符
char a = s.charAt(4);
System.out.println(a);
System.out.println("-------------遍历字符串的中的每个字符----------");
for (int i = 0; i < s.length(); i++) {
System.out.print(s.charAt(i));
}
System.out.println();
// 3. public char[] toCharArray(): 将当前字符串转换成字符数组返回
char[] chars = s.toCharArray();
for (int i = 0; i < s.length(); i++) {
char ch = chars[i];
System.out.print(ch+"\t");
}
System.out.println();
// 4. public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字符串(包前不包后)
String rs = s.substring(2,5);
System.out.println(rs);
// 5. public String substring(int beginIndex) 从传入的索引处截取,截取到末尾,得到新的字符串
String rs1 = s.substring(6);
System.out.println(rs1);
// 6. public String replace(CharSequence target, CharSequence replacement) 使用新值,将字符串中的旧值替换,得到新的字符串
String rs3 = s.replace("五月天","***");
System.out.println(rs3);
// 7. public String[] split(String regex) 根据传入的规则切割字符串,得到字符串数组返回
String rs4 = "刘备,关羽,张飞";
String [] name = rs4.split(",");
for (int i = 0; i < rs.length(); i++) {
System.out.println("名字是:"+name[i]);
}
}
}
四.String案例
1.String类开发验证码功能
public class StringDemo1 {
// 需求:
// 随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。
// 分析:
// 定义一个String类型的变量存储验a-zA-Z0-9之间的全部字符。
// 循环5次,随机一个范围内的索引,获取对应字符连接起来即可。
public static void main(String[] args) {
Random r = new Random();
//1.定义可能出现的字符
String datas = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
//2.循环5次,随机生成一个随机的索引,提取对应的字符连接起来即可
String code = "";
for (int i = 0; i < 5; i++) {
//随机生成一个索引
int index = r.nextInt(datas.length());
char data = datas.charAt(index);
code += data;
}
System.out.println(code);
}
}
2.模拟用户登陆功能
public class StringDemo2 {
// 需求:
// 模拟用户登录功能,最多只给三次机会。
// 分析:
// 系统后台定义好正确的登录名称,密码。
// 使用循环控制三次,让用户输入正确的登录名和密码,判断是否登录成功,登录成功则不再进行登录;登录失败给出提示,并让用户继续登录。
public static void main(String[] args) {
//1.定义正确的登录名和密码
String okLoginName = "zhangfei";
String okPassword = "123456";
Scanner sc = new Scanner(System.in);
//2.定义一个循环,循环3次,让用户输入
for (int i = 1; i <= 3; i++) {
System.out.println("请您输入登入名:");
String LoginName = sc.next();
System.out.println("请输入您的密码:");
String password = sc.next();
//3.判断是否登陆成功
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.手机号码屏蔽
public class StringDemo3 {
public static void main(String[] args) {
//键盘录入一个手机号码
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的手机号码:");
String tel = sc.next();
//13349675348
String before = tel.substring(0,3);
String after = tel.substring(7);
String s = before + "****" + after;
System.out.println(s);
}
}
五.集合ArrayList
1.ArrayList集合
- ArrayList是集合中的一种,它支持索引。
ArrayList集合的对象的创建
构造器 | 说明 |
---|---|
public ArrayList() | 创建一个空的集合对象 |
ArrayList集合的添加元素的方法
方法名 | 说明 |
---|---|
public boolean add(E e) | 将指定的元素追加到此集合的末尾 |
public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
public class ArrayListDemo1 {
public static void main(String[] args) {
//1.创建ArrayList的集合对象
ArrayList list = new ArrayList();
//2.添加数据
list.add(123);
list.add("张飞");
list.add("mysql");
list.add('c');
System.out.println(list);
}
}
2.ArrayList对于泛型的支持
泛型概述
- ArrayList:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。
举例:
-
ArrayList :此集合只能操作字符串类型的元素。
-
ArrayList:此集合只能操作整数类型的元素。
泛型只能支持引用数据类型,不支持基本数据类型。
public class ArrayListDemo2 {
public static void main(String[] args) {
ArrayList<String> ar = new ArrayList<>();
ar.add("刘备");
ar.add("关羽");
ar.add("张飞");
System.out.println(ar);
ArrayList<Integer> ar1 = new ArrayList<>();
ar1.add(1);
ar1.add(2);
ar1.add(3);
System.out.println(ar1);
}
}
3.ArrayList常用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 ArrayListDemo3 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("关羽");
list.add("张飞");
list.add("赵云");
list.add("黄忠");
list.add("马超");
list.add("关羽");
//1. public E get(int index) 返回指定索引处的元素
String a = list.get(2);
System.out.println(a);
//2. public int size() 返回集合中的元素的个数
System.out.println(list.size());
//3. 遍历集合中的数组
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i)+"\t");
}
System.out.println();
//4. public E remove(int index) 删除指定索引处的元素,返回被删除的元素
list.remove(2);
System.out.println(list);
//5. public boolean remove(Object o) 删除指定的元素,返回删除是否成功
System.out.println(list.remove("张飞"));
System.out.println(list);
//6. public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
String b = list.set(1,"诸葛亮");
System.out.println(b);
System.out.println(list);
}
}
五.ArrayList案例
1.遍历并删除元素值
public class ArrayListDemo4 {
// 需求:
// 某个班级的考试在系统上进行,成绩大致为:98, 77, 66, 89, 79, 50, 100
// 现在需要先把成绩低于80分以下的数据去掉。
// 分析:
// 定义ArrayList集合存储多名学员的成绩。
// 遍历集合每个元素,如果元素值低于80分,去掉它。
public static void main(String[] args) {
ArrayList<Integer> scores = new ArrayList();
scores.add(90);
scores.add(32);
scores.add(95);
scores.add(100);
scores.add(50);
scores.add(70);
scores.add(60);
scores.add(80);
scores.add(70);
System.out.println(scores);
//遍历集合
//方案一
/*for (int i = 0; i < scores.size(); i++) {
Integer a = scores.get(i);
if (a < 80){
scores.remove(a);
i--;// 删除成功后往后退一步,这样就不会跳过数据了
}
}
System.out.println(scores);*/
//方案二:倒着遍历
for (int i = scores.size()-1; i >= 0 ; i--) {
if (scores.get(i) < 80){
scores.remove(i);
}
}
System.out.println(scores);
}
}
2.影片信息在程序中的表示
public class ArrayListDemo5 {
// 需求
// 某影院系统需要在后台存储上述三部电影,然后依次展示出来。
// 分析
// 定义一个电影类,定义一个集合存储电影对象。
// 创建3个电影对象,封装相关数据,把3个对象存入到集合中去。
// 遍历集合中的3个对象,输出相关信息。
//《肖申克的救赎》,9.7,罗宾斯
//《霸王别姬》,9.6,张国荣,张丰毅
//《阿甘正传》,9.5,汤姆汉克斯
public static void main(String[] args) {
ArrayList<Movies> movie = new ArrayList<>();
Movies m1 = new Movies("《肖申克的救赎》",9.7,"罗宾斯");
Movies m2 = new Movies("《霸王别姬》",9.6,"张国荣,张丰毅");
Movies m3 = new Movies("《阿甘正传》",9.5,"汤姆汉克斯");
movie.add(m1);
movie.add(m2);
movie.add(m3);
for (int i = 0; i < movie.size(); i++) {
Movies a = movie.get(i);
System.out.println("电影名称:"+a.getName());
System.out.println("电影分数:"+a.getScore());
System.out.println("电影主演:"+a.getActor());
System.out.println("--------------------------");
}
}
}
public class Movies {
private String name;
private double score;
private String actor;
public Movies() {
}
public Movies(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;
}
}
集合中存储的元素并不是对象本身,而是对象的地址。
六.学生信息系统的数据搜索
public class SearchStudent {
// 需求
// 后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能。
// 分析
// 定义Student类,定义ArrayList集合存储如上学生对象信息,并遍历展示出来。
// 提供一个方法,可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生对象信息,并展示。
// 使用死循环,让用户可以不停的搜索。
public static void main(String[] args) {
//1.将信息存入集合中
ArrayList<Student> students = new ArrayList<>();
students.add(new Student("20221","刘备",27,"战前训导"));
students.add(new Student("20222","关羽",26,"二弟天下无敌"));
students.add(new Student("20223","张飞",25,"三弟脸很黑"));
students.add(new Student("20220","诸葛亮",30,"光环效果:奥术智慧"));
//2.遍历集合
System.out.println("学号\t名字\t年龄\t效果");
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
System.out.println(s.getStudentNumber()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getClassName());
}
//定义一个扫描器
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.getStudentNumber()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getClassName());
}
}
}
//3.定义一个方法完成搜索学号功能
/**
* 根据学生的学号查询学生返回对象
* @param students 存储全部学生对象的集合
* @param studyNumber 搜素学生的学号
* @return 学生对象 | null
*/
public static Student getStudentByid(ArrayList<Student> students,String studyNumber){
//1.遍历集合中的元素
for (int i = 0; i < students.size(); i++) {
//2.判断遍历的学号是否与我们输入的学号相同
Student s = students.get(i);
if (s.getStudentNumber().equals(studyNumber)){
//代表这个就是我们要找的学生对象
return s;
}
}//查无此人
return null;
}
}
public class Student {
private String studentNumber;
private String name;
private int age;
private String className;
public Student() {
}
public Student(String studentNumber, String name, int age, String className) {this.studentNumber = studentNumber;
this.name = name;
this.age = age;
this.className = className;}
public String getStudentNumber() { return studentNumber;}
public void setStudentNumber(String studentNumber) {this.studentNumber = studentNumber; }
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;}
}