第八章 常用API(String、ArrayList)
前言
API(Application Programming Interface,应用,程序编程接口)
- Java写好的技术(功能代码),咱们可以直接调用。
- Oracle也为Java提供的这些功能代码提供了相应的API文档 (技术使用说明书)。
String简单介绍
- String类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用。
ArrayList简单介绍
- ArrayList代表的是集合类,集合是一种容器,与数组类似,不同的是集合的大小是不固定的。
- 通过创建ArrayList的对象表示得到一个集合容器,同时ArrayList提供了比数组更好用,更丰富的API(功能)给程序员使用。
提示:以下是本篇文章正文内容,下面案例可供参考
一、String
1、String类概述
String 概述
- java.lang.String类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。
- Java程序中的suoyong-字符串文字(例如“abc”)都为此类的对象。
String类的特点详情 - String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。
2、String类创建对象的2种方式
创建字符串对象的2种方式
- 方式一:直接使用" " 定义。(推荐方式)
- 方式二:通过String类的构造器创建对象。
有什么区别?(面试常考) - 以" " 方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。
- 通过构造器new对象,没new一次都会产生一个新对象,放在堆内存中。
3、String类常见面试题
4、String类常用API-字符串内容比较
字符串的内容比较:
- 推荐使用String类提供的"equals" 比较:只关心内容一样即可
5、String类常用API-遍历、替换、截取、分割操作
package com.itheima.string;
/**
目标:掌握String常用的其他API
*/
public class StringAPIOtherDemo5 {
public static void main(String[] args) {
//1、public int length() 返回此字符串的长度
String name = "我爱你中国love";
System.out.println(name.length()); //9
//2、public char charAt(int index) 获取某个索引位置处的字符
char c = name.charAt(1);
System.out.println(c); //爱
System.out.println("--------遍历字符串中的每个字符--------");
for (int i = 0; i < name.length(); i++) {
char ch = name.charAt(i);
System.out.println(ch);
}
//3、public char[] toCharArray(): 将当前字符串转换成字符数组返回
char[] chars = name.toCharArray();
for (int i = 0; i < chars.length; i++) {
char ch = chars[i];
System.out.println(ch);
}
//4、public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字符串(包前不包后)
String name2 = "Java是最厉害的编程语言!";
String rs = name2.substring(0, 9);
System.out.println(rs); //Java是最厉害的
String rs1 = name2.substring(4, 9);
System.out.println(rs1); //是最厉害的
//5、public String substring(int beginIndex) 从当前索引一直截取到末尾
String rs2 = name2.substring(4);
System.out.println(rs2); //是最厉害的编程语言!
//6、public String replace(CharSequence target,CharSequence replacement)
String name3 = "金三胖是最厉害的80后,金三胖棒棒的!";
String rs3 = name3.replace("金三胖","***");
System.out.println(rs3); //***是最厉害的80后,***棒棒的!
//7、public boolean contains(CharSequence s)
System.out.println(name3.contains("金三胖")); //true
System.out.println(name3.contains("金二胖")); //false
//8、public boolean startsWiths(String prefix)
System.out.println(name3.startsWith("金三胖")); //true
System.out.println(name3.startsWith("金三胖是最厉害的")); //true
System.out.println(name3.startsWith("金二胖")); //false
//9、public String[] split(String s) 按照某个内容把字符串分割成字符串数组返回
String name4 = "hhh,jjj,www";
String[] names = name4.split(",");
for (int i = 0; i < names.length; i++) {
System.out.println("选择了:" + names[i]); //选择了:hhh 选择了:jjj 选择了:www
}
}
}
String案例操作
package com.itheima.string;
import java.util.Random;
/**
练习题:使用String完成随机生成5位的验证码
*/
public class StringExec6 {
public static void main(String[] args) {
//1、定义可能出现的字符信息
String datas = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
//2、循环5次,每次生成一个随机的索引,提取对应的字符连接起来即可
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;
}
//3、输出字符串变量即可
System.out.println(code);
}
}
public class StringExec7 {
public static void main(String[] args) {
//1、定义正确的登录名和密码
String okLoginName = "admin";
String okPassword = "itheima";
//2、定义一个循环,循环3次,让用户登录
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();
//3、判断登陆是否成功!
if (okLoginName.equals(loginName)){
//4、判断密码是否正确
if (okPassword.equals(password)){
System.out.println("登陆成功!欢迎进入系统~~~~~~");
break;
}else {
//密码错误
System.out.println("您的登录密码不正确!您还剩余" + (3 - i) + "次机会!");
}
}else {
System.out.println("您的登录名称不正确!您还剩余" + (3 - i) + "次机会!");
}
}
}
}
package com.itheima.string;
import java.util.Scanner;
/**
练习题:手机号码屏蔽
*/
public class StringExec8 {
public static void main(String[] args) {
//1、键盘录入一个手机号码
Scanner sc = new Scanner(System.in);
System.out.println("请您输入您的手机号码:");
String tel = sc.next();
//2、截取号码的前三位,后四位
String before = tel.substring(0, 3); //0 1 2
String after = tel.substring(7); //从索引7开始截取到手机号码的末尾
String s = before + "****" + after;
System.out.println(s);
}
}
二、ArrayList
1.集合概述
集合是与数组类似,也是一种容器,用于装数据的
数组的特点
- 数组定义完成并启动后,类型确定、长度固定。
- 问题:在个数不确定,且要进行增删数据操作的时候,数组是不太合适的。
集合的特点
- 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。
- 集合非常适合做元素个数不确定,且要进行增删操作的业务场景。
- 集合提供了许多丰富、好用的功能,而数组的功能很单一。
2、 ArrayList集合快速入门
ArrayList集合
- ArrayList是集合中的一种,它支持索引。(暂时先学这个,后期学习整个集合体系)
ArrayList集合的对象获取
ArrayList集合添加元素的方法
3、ArrayList对于泛型的支持
泛型概述
- ArrayList:其实就是一个泛型类,可以在编译阶段约束集合对象只能操作某种数据类型。
举例:
- ArrayList:此集合只能操作字符串类型的元素。
- ArrayList:此集合只能操作整数类型的元素。
注意:集合中只能存储引用类型,不支持基本数据类型。
4、ArrayList常用API、遍历
ArrayList集合常用方法
package com.itheima.arraylist;
import java.util.ArrayList;
import java.util.List;
/**
目标:掌握ArrayList籍华人的常用API
*/
public class ArrayListDemo3 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Java");
list.add("MySQL");
list.add("MyBatis");
list.add("HTML");
//1、public E get(int index) 返回指定索引处的元素
String e = list.get(3);
System.out.println(e);
//2、public int size() 获取集合的大小(元素个数)
System.out.println(list.size()); //5
//3、完成集合的遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
//4、public E remove(int index) 删除指定索引处的元素,返回被删除的元素
System.out.println(list); //[Java, Java, MySQL, MyBatis, HTML]
String e2 = list.remove(2);
System.out.println(e2);
System.out.println(list);
//5、public boolean remove(Object o) 删除指定的元素,返回删除是否成功true/false
System.out.println(list.remove("MyBatis"));
System.out.println(list);
ArrayList<String> list1 = new ArrayList<>();
list1.add("Java");
list1.add("很有用");
list1.add("Java");
list1.add("MySQL");
System.out.println(list1);
//只会删除第一次出现的元素,后面的不删
System.out.println(list1.remove("Java"));
System.out.println(list1);
//6、public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
String e3 = list1.set(0, "坏官方");
System.out.println(e3);
System.out.println(list1);
}
}
5、ArrayList集合案例:遍历并删除元素
package com.itheima.arraylist;
import java.util.ArrayList;
public class ArrayListTest4 {
public static void main(String[] args) {
//目标:学习遍历并删除元素的正确方案
//1、创建一个ArrayList集合存储一个班级学生的成绩
ArrayList<Integer> scores = new ArrayList<>();
scores.add(98);
scores.add(77);
scores.add(66);
scores.add(89);
scores.add(50);
scores.add(79);
scores.add(100);
System.out.println(scores);
//2、把低于80分的成绩从集合中去掉
//scores = [98, 77, 66, 89, 50, 79, 100]
//scores = [98, 66, 89, 50, 100]
// i
//有毛病的代码!
// for (int i = 0; i < scores.size(); i++) {
// int score = scores.get(i);
// if (score < 80){
// //删除这个分数
// scores.remove(i);
// }
// }
// System.out.println(scores);
//scores = [98, 77, 66, 89, 50, 79, 100]
//scores = [98, 89, 100]
// i
//完美方案之一
/* for (int i = 0; i < scores.size(); i++) {
int score = scores.get(i);
if (score < 80){
//删除这个分数
scores.remove(i);
i--; //删除成功后,必须退一步,这样可以保证下次回到这个位置,如此则不会跳过数据
}
}
System.out.println(scores); */
//scores = [98, 77, 66, 89, 50, 79, 100]
//完美方案之二:从后面倒着遍历在删除就可以
for (int i = scores.size() - 1; i >= 0; i--){
int score = scores.get(i);
if (score < 80){
//删除这个分数
scores.remove(i);
}
}
System.out.println(scores);
}
}
ArrayList集合案例:存储自定义类型的对象
package com.itheima.arraylist;
import java.util.ArrayList;
/**
案例:集合存储自定义元素并遍历。
需求:定义电影类(名称,分值,演员),创建3个电影对象,代表三部影片,存入集合中并遍历
《肖申克的救赎》, 9.7 , 罗宾斯
《霸王别姬》, 9.6 , 张国荣、张丰毅
《阿甘正传》, 9.5 ,汤姆.汉克斯
*/
public class ArrayListTest5 {
public static void main(String[] args) {
//目标:理解ArrayList集合存储自定义类型的对象
//1、定义电影类
//2、创建三个电影对象
Movie m1 = new Movie("《肖申克的救赎》", 9.7 , "罗宾斯");
Movie m2 = new Movie("《霸王别姬》", 9.6 , "张国荣、张丰毅");
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++) {
//i = 0 1 2
Movie m = movies.get(i);
System.out.println("电影名称:" + m.getName());
System.out.println("电影评分:" + m.getScore());
System.out.println("电影主演:" + m.getActor());
System.out.println("--------------------");
}
}
}
ArrayList集合案例:元素搜索
package com.itheima.arraylist;
import java.util.ArrayList;
import java.util.Scanner;
/**
案例:学生信息系统:展示数据,并按照学号完成搜索
学生类信息(学号、姓名、性别、班级)
测试数据:
"20180302","叶孤城",23,"护理一班"
"20180303","东方不败",23,"推拿二班"
"20180304","西门吹雪",26,"中药学四班"
"20180305","梅超风",26,"神经科二班"
*/
public class ArrayListTest6 {
public static void main(String[] args) {
//1、定义学生类
//2、创建集合存储学生对象,创建学生对象封装学生信息
// 把学生对象添加到集合中去
ArrayList<Student> students = new ArrayList<>();
students.add(new Student("20180302","叶孤城",23,"护理一班"));
students.add(new Student("20180303","东方不败",23,"推拿二班"));
students.add(new Student("20180304","西门吹雪",26,"中药学四班"));
students.add(new Student("20180305","梅超风",26,"神经科二班"));
//3、遍历这些学生信息展示
System.out.println("学号\t\t\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();
//5、调用方法查询
Student s = getStudentById(students, studyNumber);
//6、判断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());
}
}
}
/**
* 根据学生的学号查询学生对象返回
* @param students 存储全部学生对象的集合
* @param studyNumber 搜索的学生的学号
* @return 学生对象 | null
*/
public static Student getStudentById(ArrayList<Student> students, String studyNumber){
//1、遍历全部学生对象
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
//2、询问当前遍历的这个学生对象的学号,是否是我们要找的学号
if (s.getStudyNumber().equals(studyNumber)){
//这个s代表的学生对象,就是我们要找的,返回他
return s;
}
}
//查无此人
return null;
}
}