什么是API❓
API就是Java已经写好的功能代码,可以让我们直接调用的,这些功能代码还有相应的API文档。
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
目录
1️⃣String
◼String类的概述
◼String类创建对象的两种方式
◼String类常见的面试题
◼String类常用API
◼String常见小案例
2️⃣ArrayList(集合)
◼集合添加元素的方法
◼集合对于泛型的支持
◼ArrayList的常用API
◼小案例
1️⃣String
◼String类的概述
✨java.lang.String类代表字符串,String类定义的变量可以指向字符串对象,然后操作该字符串
例如 : String name = "哇哈哈哈"
✨Java程序中所有的字符串文字都为此类的对象
◼String类的特点详解
String类常被定义为不可变字符串类型,他的对象在创建后不可被更改
从上述代码中发现字符串变量name指向的字符串对象已经被更改了这是怎么回事呢?(⊙ˍ⊙)?
字符串对象存储在哪里❓:以" "方式给出的字符串对象存储在字符串常量池中
name += "教育" 等价于 name = name + "教育",因为右侧进行的是name + 运算而不是直接的 " "方式的字符串运算所以他会开辟一片新的内存区存储,产生一个新的地址。
String变量每次修改其实都是产生并指向了新的字符串对象,而最初的字符串对象并没有被改变,所以说他为不可变字符串。
◼String类创建对象的两种方式
①直接使用 "" 定义(推荐使用)
String name = "小王"
②通过String类的构造器创建对象
有什么区别呢?(面试常考)
◼以 " "给出的字符串对象在内存中放在字符串常量池中且相同的内容只存放一份,也就是说他们的地址是一样的。
◼new出来的对象,每new一次都会产生一个新的对象放在内存中,他们的地址是不同的。
◼String类常见的面试题
◼String类常用API
①字符串的比较
package api;
import java.util.Scanner;
public class StringEqualsDemo {
public static void main(String[] args) {
//正确的登录名和密码
String okName = "wanghaha";
String okPassword = "123456";
//请您输入正确的登录名和密码
Scanner sc = new Scanner(System.in);
System.out.println("登录名称:");
String name = sc.next();
System.out.println("登录密码:");
String password = sc.next();
//判断是否相等
if (okName.equals(name)&&okPassword.equals(password)){
System.out.println("登录成功");
}else {
System.out.println("登录名或者密码错误");
}
//不区分大小写的equals判断
String okCode = "A12ab";
String code = "a12Ab";
if (okCode.equalsIgnoreCase(code)){
System.out.println("验证码正确");
}else {
System.out.println("验证码错误");
}
}
}
注意String 内容的比较不适合用==
②遍历、替换、截取、分割操作
package api;
public class StringapiDemo1 {
public static void main(String[] args) {
// public int length() 返回此字符串的长度
String name = "我爱你Love";
System.out.println(name.length());
// public char charAt(int index) 获取某个索引位置处的字符
System.out.println(name.charAt(1));
System.out.println("---------遍历数组--------");
for (int i = 0; i < name.length(); i++) {
char c = name.charAt(i);
System.out.println(c);
}
// public char[] toCharArray(): 将当前字符串转换成字符数组返回
System.out.println("---------------");
char[] ch = name.toCharArray();
for (int i = 0; i < ch.length; i++) {
char c = ch[i];
System.out.println(c);
}
// public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字符串(包前不包后)
System.out.println("---------------");
String ss = "我喜欢喝娃哈哈";
String s = ss.substring(0,4);
System.out.println(s);
// public String substring(int beginIndex) 从传入的索引处截取,截取到末尾,得到新的字符串
System.out.println("---------------");
System.out.println(ss.substring(4));
// public String replace(CharSequence target,CharSequence replacement)用新值,将字符串中的旧值替换,得到新的字符串
System.out.println("---------------");
String a = ss.replace("娃哈哈","加多宝");
System.out.println(a);
// public boolean contains(CharSequence s)判断是否包含
System.out.println("---------------");
System.out.println(ss.contains("娃哈哈"));
// public boolean startsWith(String prefix) 判断是否以他开始
System.out.println("---------------");
System.out.println(ss.startsWith("我喜欢"));
// public String[] split(String regex) 根据传入的规则切割字符串,得到字符串数组返回
System.out.println("---------------");
String name2 = "王宝强、王哈哈、王二麻子";
String[] name3 = name2.split("、");
for (int i = 0; i < name3.length; i++) {
System.out.println(name3[i]);
}
}
}
◼String常见小案例
①利用String开发5位数的随机验证码功能,每位可能是大写、小写、数字
分析:定义一个String 类用来存储A-Z,a-z,0-9之间的全部字符
利用一个for循环5次 每次随机拿出一个字符再连接起来
public class StringDemo2 {
public static void main(String[] args) {
//利用String生成一个随机的5位验证码
//1定义可能出现的字符信息
String datas = "qazwsxedcrfvtgbyhnujmikolpQAZWSXEDCRFVTGBYHNUJMIKOLP0987654321";
//2利用一个循环产生五个随机数
Random rs = new Random();
String code = "";
for (int i = 0; i < 5; i++) {
int index = rs.nextInt(datas.length());
char c = datas.charAt(index);
code += c;
}
//输出
System.out.println(code);
}
}
②模拟用户登录功能,最多给三次机会
//模拟用户输入用户名和密码登录
public class StringLoginDemo {
public static void main(String[] args) {
//1定义用户名和密码
String okLoginName = "王哈哈";
String okPassword = "123456";
//2循环三次
Scanner sc = new Scanner(System.in);
for (int i = 1; i <= 3; i++) {
//3判断用户名是否正确
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("密码错误");
}
} else {
System.out.println("用户名错误");
}
}
}
}
③手机号码屏蔽功能,键盘录入一个手机号最终输出为132****2222
分析:键盘录入一个手机号
调用字符对象API截取相应位置前三为和后四位
然后和**** 链接
//加密手机号
public class Stringtel {
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(集合)
集合与数组类似也是一种容器,用于封装数据的
数组定义完之后,类型确定,长度确定
集合的特点:
集合的大小不固定,启动后可以动态变化,类型也可以选择不固定
集合非常适合大小不固定且要进行增删改查的操作
集合提供了许多好用的API功能
◼集合添加元素的方法
public class ArrayListDemo1 {
public static void main(String[] args) {
//1创建ArrayList集合的对象
ArrayList list = new ArrayList();
//2添加元素
list.add("java");
list.add("娃哈哈");
list.add(23);
System.out.println(list);
//3给指定索引插入元素
list.add(1,"喜之郎");
System.out.println(list);
}
}
◼集合对于泛型的支持
ArrayList
举例:
ArrayList
ArrayList
注意:集合中不支持基本数据类型,只能存储引用类型
◼ArrayList的常用API
package arraylist;
import java.util.ArrayList;
public class ArrayListDemo3 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add("java");
list.add("java");
list.add("C++");
list.add("html");
list.add("mabaties");
// 1public E get(int index) 返回指定索引处的元素
System.out.println("-------------");
String a = list.get(2);
System.out.println(a);
// 2public int size() 返回集合中的元素的个数
System.out.println("-------------");
System.out.println(list.size());
// 3public E remove(int index) 删除指定索引处的元素,返回被删除的元素
System.out.println("-------------");
String b = list.remove(0);
System.out.println(b);
System.out.println(list);
// 4public boolean remove(Object o) 删除指定的元素,返回删除是否成功
System.out.println("-------------");
System.out.println(list.remove("java")); //删除的是该元素出现的第一个位置
System.out.println(list);
// 5public E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
System.out.println("-------------");
String c = list.set(0,"mysql");
System.out.println(c);
System.out.println(list);
}
}
◼小案例
①删除某班成绩低于80分的数据
import java.util.ArrayList;
//某个班级的考试在系统上进行,成绩大致为:98, 77, 66, 89, 79, 50, 100,删除低于80分的。
public class ArrayListTest1 {
public static void main(String[] args) {
ArrayList scorces = new ArrayList<>();
scorces.add(98);
scorces.add(77);
scorces.add(66);
scorces.add(89);
scorces.add(79);
scorces.add(50);
scorces.add(100);
System.out.println(scorces);
//错误的代码 思考一下为什么错了? 因为每删除一个数 i都会+1 使得跳过一个数的判断
// for (int i = 0; i < scorces.size(); i++) {
// int scorce = scorces.get(i);
// if (scorce < 80){
// scorces.remove(i);
// }
// }
//解决办法一
// for (int i = 0; i < scorces.size(); i++) {
// int scorce = scorces.get(i);
// if (scorce < 80){
// scorces.remove(i);
// i--;
// }
// }
//解决办法二 从后面倒着删除
//[98, 77, 66, 89, 79, 50, 100]
//[98, 77, 66, 89, 79, 100]
// i
for (int i = scorces.size() - 1; i >= 0 ; i--) {
int scorce = scorces.get(i);
if (scorce < 80){
scorces.remove(i);
}
}
System.out.println(scorces);
}
}
注意:思考一下为什么错了? 因为每删除一个数 i都会+1 使得跳过一个数的判断
// for (int i = 0; i < scorces.size(); i++) {
// int scorce = scorces.get(i);
// if (scorce < 80){
// scorces.remove(i);
// }
// }
②后台程序需要加载存储上学生信息,然后按照提供的学号实现搜索学生信息的功能
分析:
定义一个Student类存储学生信息
提供一个方法,可以接收ArrayList集合,和搜索学生的学号,返回搜索学生的信息
使用死循环可以让用户不停的搜索
package arraylist;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListDemo4 {
public static void main(String[] args) {
//1定义学生类
//2创建集合存储学生对象,创建学生对象封装学生信息
//把学生信息录入集合中去
ArrayList students = new ArrayList<>();
// Student m1 = new Student("张三",23,"202201","终极一班");
// students.add(m1);
students.add(new Student("张三",23,"202201","终极一班"));
students.add(new Student("李四",23,"202202","终极二班"));
students.add(new Student("王五",23,"202203","终极三班"));
students.add(new Student("王麻",23,"202204","终极四班"));
//3遍历
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
System.out.println(s.getId() + "t"+ s.getName() + "t" + s.getAge()+"t" + s.getClassName());
}
//4定义方法完成学生搜索功能
Scanner sc = new Scanner(System.in);
while (true){
System.out.println("请您输入要查询的学生学号");
String studentNumber = sc.next();
//5调用方法查询
Student s = getStudentId(students,studentNumber);
//判断s中是否有学生对象
if (s == null){
System.out.println("对不起查无此人");
}else {
System.out.println("您查询的学生信息如下:");
System.out.println(s.getId() + "t"+ s.getName() + "t" + s.getAge()+"t" + s.getClassName());
}
}
}
public static Student getStudentId(ArrayList students,String studentNumber){
//1遍历数组
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
if (s.getId().equals(studentNumber)){
//是我们要找的
return s;
}
}
return null;
}
}



