目录
1.API
-
API(ApplicationProgrammingInterface,应用程序编程接口)
-
java写好的功能代码,可直接调用
-
有相应的技术文档
2.String类型
定义的变量用于存储字符串,同时提供了很多操作字符串的功能;
2.1 String类特点
-
String常被称为不可变字符串类型,对象创建后不可更改;
-
String每次修改都是产生并指向新的字符串对象;
-
通过“+”连接几个字符串,原来字符串没有改变,只是可以通过拼接控制输出效果
2.2 创建字符串对象
/**
* 创建String的常用方法
*/
public class StringDemo {
public static void main(String[] args) {
String name = "wind";
System.out.println(name);
String s1 = new String();
System.out.println(s1);//空白
String s2 = new String("岩峰");
System.out.println(s2);
char[] c = {'a','v','i'};
String s3 = new String(c);
System.out.println(s3);//avi
byte[] b ={97,98,99};
String s4 = new String(b);
System.out.println(s4);//abc
}
}
2.3 方法间区别
以“ ”方式给出字符串对象,在字符串常量池中存储,相同内容只存一份;
new对象,产生新对象,放在堆内存中;
String name = "wind";
String name2 = "wind";
System.out.println(name==name2);//true
char[] c = {'a','v','i'};
String s3 = new String(c);
String s33 = new String(c);
System.out.println(s3==s33);//false
2.3.1 String常量原理
-
在堆内存的字符串常量池创建,将地址赋给变量名;
-
相同内容不会在常量池中创建新的;
2.3.2 new String对象原理
每次new都会在堆内存中创建新的对象,赋予常量的地址不同;
2.4 常见面试题
String s2 = new String("wind");//创建两个对象;一个常量,一个new;指向堆内存
String s22 = "wind";//创建0个对象,原因是常量池中有wind了,上方创建,指向常量池
System.out.println(s2==s22);//false
String s1 = "abc";//常量池
String s2 = "ab";
String s3 = s2 + "c";//运算,指向堆内存
System.out.println(s1==s3);//false
String s1 = "abc";//常量池
String s2 = "a"+"b"+"c";//java存在编译优化机制,直接转成"abc";字面量是确定的会优化
//变量编译阶段不知道值,字面量可以
System.out.println(s1==s2);//true
2.5 常用API
//自定义一个字符串
//注意这里字符串最后是空,下面会用到
String str = new String("13,2df+fk,05s,kd, ");
//这里我们假设使用","作为分隔符
String[] newStr = str.split(",");
//[13, 2df+fk, 05s, kd, ]
System.out.println(Arrays.toString(newStr));
//两个分隔符的情况 ","和"+"作为分隔符
//同样还是返回字符串数组类型的数据
//这里我实验之后发现给"+"加上"[]"之后才可以通过编译,得到正确的结果
String[] newStr2 = str.split(",|[+]");
//[13, 2df, fk, 05s, kd, ]
System.out.println(Arrays.toString(newStr2));
/**
*
* 只是条无辜的分割线
*
*/
String name = "wind";
String passWord = "qq123456";
Scanner scanner = new Scanner(System.in);
System.out.println("输入姓名:");
String name1 = scanner.next();
System.out.println("输入密码:");
String pass = scanner.next();
/**
* equals 比较字符串是否一致
*/
if (name.equals(name1) && passWord.equals(pass)){
System.out.println("正确!");
}else {
System.out.println("错误!");
}
String nameTwo = "WinD";
String passTwo= "Qq123456";
/**
* equalsIgnoreCase 忽略大小写,比较字符串是否一致
*/
if (name.equalsIgnoreCase(nameTwo) && passWord.equalsIgnoreCase(passTwo)){
System.out.println("正确");
}
2.5.1 案例:验证码
/**
* 验证码:
*/
public class StringTest1 {
public static void main(String[] args) {
String datas = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
int dataLength = datas.length();
Random random = new Random();
String code = "";
for (int i = 0; i < 5; i++) {
int index = random.nextInt(dataLength);
char c = datas.charAt(index);
code += c;
}
System.out.println("输出字符串:"+code);
}
}
2.5.2 案例:屏蔽手机号
/**
* 屏蔽部分手机号码
*/
public class StringTest2 {
public static void main(String[] args) {
String phone = "132xxxx9xxx";
//截取前三位
String before = phone.substring(0,3);
//截取后四位
String after = phone.substring(7);
String phone2 = before+"****"+after;
System.out.println(phone2);
}
}
3.ArrayList
-
代表集合类,集合是一种容器,与数组类似,不同的是集合大小不固定;
-
非常适合元素个数不确定,进行增删业务场景
-
功能丰富
-
-
通过创建ArrayList对象得到一个集合容器;
-
ArrayList是集合一种,支持索引
-
ArrayList list = new ArrayList();
list.add(1);
list.add("张燕");
list.add("凛冬");
list.add(188);
list.add(1999);
//[1, 张燕, 凛冬, 188, 1999]
System.out.println(list);
//指定位置插入,后面后移
list.add(2,"小火火");
//[1, 张燕, 小火火, 凛冬, 188, 1999]
System.out.println(list);
3.1 泛型概述
ArrayList<E>:泛型类,编译阶段约束集合对象只能操作某种数据类型;
ArrayList<String>:只能操作字符串类型;
ArrayList<Integer>:只能操作整数类型;
注意:集合中只能存储引用类型,不支持基本数据类型
4.集合案例
4.1 遍历并删除元素值
删除两种方案:
1.应对补位,i--;
2.倒序删除;
/**
* 遍历并删除元素值:
* 低于80的值删除;
*/
public class ArrayListDemo1 {
public static void main(String[] args) {
Integer[] list = {98,77,66, 89,79,50,88,100};
ArrayList<Integer> scores = new ArrayList<>();
//同<泛型>添加
Collections.addAll(scores, list);
//方案一:i--补位
/* for (int i = 0; i < scores.size(); i++) {
if (scores.get(i) < 80){
scores.remove(i);
i--;//删除成功后,后退一步,再次判断,应对补位
}
}*/
//方案二:倒排,删除后补位不影响
for (int i = scores.size()-1; i >0 ; i--) {
if (scores.get(i) < 80){
scores.remove(i);
}
}
System.out.println(scores.toString());
}
}
4.2 存储自定义型对象:
集合中存储的是对象的地址!
/**
* 存储自定义型对象:
* 存入三部电影信息,并输出
*/
public class ArrayListDemo2 {
public static void main(String[] args) {
Movie m1 = new Movie("斗破苍穹",6.6,"消炎");
Movie m2 = new Movie("武动乾坤",6.6,"林东");
Movie m3 = new Movie("大主宰",7.6,"木木");
ArrayList<Movie> movies = new ArrayList<>();
//存了三个地址
movies.add(m1);
movies.add(m2);
movies.add(m3);
for (int i = 0; i < movies.size(); i++) {
Movie movie = movies.get(i);
System.out.println(movie.getName()+movie.getScore()+movie.getActor());
System.out.println("----------------------------");
}
}
}
4.3 元素搜索
/**
* 元素搜索:
*/
public class ArrayListDemo3 {
public static void main(String[] args) {
ArrayList<Student> students = new ArrayList<>();
students.add(new Student("1","赵日天",18,"炸天一班"));
students.add(new Student("2","叶良辰",38,"炸天一班"));
students.add(new Student("3","荀彧",88,"炸天二班"));
students.add(new Student("4","李白",28,"炸天二班"));
System.out.println("全部学生信息");
System.out.println("-------------------------");
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());
System.out.println("-------------------------");
}
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("输入要搜索学生信息的Id:");
String id = scanner.next();
//根据学号搜索信息
Student ss = getStudentById(students, id);
if (ss==null || ss.equals("")){
System.out.println("查无此人");
System.out.println("-------------------------");
}else {
System.out.println("-------查询到的信息如下--------");
System.out.println(ss.getStudyNumber()+"\t"+ss.getName()+"\t"+ss.getAge()+"\t"+ss.getClassName());
System.out.println("-------------------------");
}
}
}
/**
* 根据学号查询信息:
* @param students 全体学生信息集合
* @param id
*/
private static Student getStudentById(ArrayList<Student> students,String id) {
for (int i = 0; i < students.size(); i++) {
Student student = students.get(i);
if (student.getStudyNumber().equals(id)){
return student;
}
}
return null;
}
}