目录
一、API简介
二、String简介
1.String类概述
2.String类创建对象的2种方式
3.String类常见面试题
4.String类常用API-字符串内容比较
5.String类常用API-遍历、替换、截取、分割操作
6.String类案例实战
三、ArrayList简介
1.集合概述
2.ArrayList集合快速入门
3.ArrayList对泛型的支持
4.ArrayList常用API、遍历
5.ArrayList集合案例:遍历并删除元素
6.ArrayList集合案例:存储自定义类型的对象
7.ArrayList集合案例:元素搜索
一、API简介
API(应用程序编程接口):1.Java写好的技术(功能代码),我们可以直接调用;2.Oracle也为Java提供的这些功能代码提供了相应的API文档(技术说明书)
二、String简介
String类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用
1.String类概述
String类概述:1.java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串;2.Java程序种的所有字符串文字(例如"abc")都为此类的对象
String类的特点详解:String其实常被称为不可变字符串类型,它的对象在创建后不能被更改
String是不可变字符串的原因:String变量每次的修改其实都是产生并指向了新的字符串对象;原来的字符串对象都是没有改变的,所以称为不可变字符串
2.String类创建对象的2种方式
方式一:直接直接使用" " 定义。(推荐方式) 例如:String name = "皮卡丘";
方式二:通过String类的构造器创建对象。
两种方式的区别:以" "方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份;通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中
package com.pikaqiu.string;
import java.nio.charset.StandardCharsets;
public class StringDemo1 {
public static void main(String[] args) {
//方式一:直接直接使用" " 定义
String name = "妙蛙种子";
System.out.println(name);
System.out.println("--------------------");
//方式二:通过String类的构造器创建对象
//1.public String(): 创建一个空白字符串对象,不含有任何内容(几乎不用)
String s1 = new String(); //s1 = ""
System.out.println(s1);
System.out.println("--------------------");
//2.public String(String): 根据传入的字符串内容,来创建字符串对象(几乎不用)
String s2 = new String("我爱你中国");
System.out.println(s2);
System.out.println("--------------------");
//3.public String(char[] c): 根据字符数组的内容,来创建字符串对象
char[] chars = {'皮','卡','丘'};
String s3 = new String(chars);
System.out.println(s3);
System.out.println("--------------------");
//4.public String(byte[] b): 根据字节数组的内容,来创建字符串对象
byte[] bytes = {97,98,99,65,66,67};
String s4 = new String(bytes);
System.out.println(s4);
System.out.println("--------------------");
String s5 = "abc";
String s6 = "abc";
System.out.println(s5 == s6); //true
char[] chars1 = {'a','b','c'};
String s7 = new String(chars1);
String s8 = new String(chars1);
System.out.println(s7 == s8); //false
}
}
3.String类常见面试题
package com.pikaqiu.string;
public class StringTest {
public static void main(String[] args) {
//第一题
String s2 = new String("abc"); //这里创建了两个对象,一个在常量池,一个在堆内存
String s1 = "abc"; //这里没有创建对象,常量池中已有
System.out.println(s1 == s2); //false
//第二题
String s3 = "abc";
String s4 = "ab";
String s5 = s4 + "c";
System.out.println(s3 == s5); //false
//第三题
String s6 = "abc";
String s7 = "a" + "b" + "c"; //Java存在编译优化机制,程序编译时:"a" + "b" + "c"会直接转成"abc"
System.out.println(s6 == s7); //true
}
}
4.String类常用API-字符串内容比较
equals比较:只关心内容一样即可
package com.pikaqiu.string;
import java.util.Scanner;
public class StringDemo3 {
public static void main(String[] args) {
String okName = "pikaqiu";
String okPassword = "123456";
Scanner sc = new Scanner(System.in);
System.out.print("登录名称: ");
String name = sc.next();
System.out.print("登录密码: ");
String password = sc.next();
// //以下代码错误原因: ”==“是比较地址,okName == name是常量池中的地址和堆内存地址比较,很明显不会一样
// if(okName == name && okPassword == password){
// System.out.println("登录成功!");
// }else{
// System.out.println("用户名或者密码输入错误!");
// }
if(okName.equals(name) && okPassword.equals(password)){
System.out.println("登录成功!");
}else{
System.out.println("用户名或者密码输入错误!");
}
//忽略大小写比较内容的API:一般用于比较验证码这样的业务逻辑
String okCode = "23AdFh";
String code = "23adfh";
System.out.println(okCode.equals(code)); //false
System.out.println(okCode.equalsIgnoreCase(code)); //true
}
}
5.String类常用API-遍历、替换、截取、分割操作
package com.pikaqiu.string;
public class StringDemo4 {
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++) {
System.out.print(name.charAt(i));
}
System.out.println();
System.out.println("----------------------");
//3.public char[] toCharArray(): 把字符串转换成字符数组
char[] chars = name.toCharArray();
for (int i = 0; i < chars.length; i++) {
System.out.print(chars[i]);
}
System.out.println();
System.out.println("----------------------");
//4.public String substring(int beginIndex , int endIndex): 截取内容,包前不包后
String name2 = "Java是最厉害的编程语言!";
System.out.println(name2.substring(0, 9)); //Java是最厉害的
//5.public String substring(int beginIndex): 从当前索引一直截取到末尾
System.out.println(name2.substring(9)); //编程语言!
//6.public String replace(CharSequence target , CharSequence replacement)
//替换字符串的内容
String name3 = "皮卡丘是最可爱的";
System.out.println(name3.replace("皮卡丘", "***")); /
//方案二:
//从后面倒着遍历再删除就可以
for (int i = list.size() - 1 ; i >= 0 ; i--) {
if(list.get(i) < 80){
list.remove(i);
}
}
System.out.println(list); //输出[98, 89, 100]
}
}
6.ArrayList集合案例:存储自定义类型的对象
需求:某影院系统需要在后台存储上述三部电影,然后依次展示出来
package com.pikaqiu.arraylist;
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;
}
//定义get和set方法
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;
}
}
package com.pikaqiu.arraylist;
import java.util.ArrayList;
public class ArrayListTest2 {
public static void main(String[] args) {
//创建三个电影对象
Movie movie1 = new Movie("肖生客的救赎",9.7,"罗宾斯");
Movie movie2 = new Movie("霸王别姬",9.9,"张国荣,张丰毅");
Movie movie3 = new Movie("阿甘正传",9.6,"汤姆.汉克斯");
//创建一个电影类型的集合存储三部电影
ArrayList movies = new ArrayList<>();
movies.add(movie1);
movies.add(movie2);
movies.add(movie3);
System.out.println(movies); //这是三部电影的地址
//遍历电影类型的集合中的每个电影对象
for (int i = 0; i < movies.size(); i++) {
Movie m = movies.get(i);
System.out.print("电影名称:" + m.getName() + " ");
System.out.print("电影分数:" + m.getScore() + " ");
System.out.print("电影主演:" + m.getActor() + " ");
System.out.println();
}
}
}
总结:集合中存储的元素并不是对象本身,而是对象的地址
7.ArrayList集合案例:元素搜索
需求:后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能
package com.pikaqiu.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;
}
}
package com.pikaqiu.arraylist;
import java.util.ArrayList;
import java.util.Scanner;
public class ArrayListTest3 {
public static void main(String[] args) {
//1.定义学生类
//2.创建集合存储学生对象,创建学生对象封装学生信息
//把学生对象添加到集合中去
ArrayList 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.遍历学生信息展示
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
System.out.print("学号:" + s.getStudyNumber() + "t");
System.out.print("姓名:" + s.getName() + "t");
System.out.print("年龄:" + s.getAge() + "t");
System.out.print("班级:" + s.getClassName() + "t");
System.out.println();
}
//4.定义方法完成按照学号搜索的功能
Scanner sc = new Scanner(System.in);
boolean flag = true;
while (flag) {
System.out.print("请输入学号查询学生对象:");
String studyNumber = sc.next();
//5.调用方法查询
Student s = getStudentById(students, studyNumber);
//6.判断s是否存在学生对象地址
if(s == null){
System.out.println("查无此人!!!");
}else{
System.out.println("您查询的学生信息如下:");
System.out.print("学号:" + s.getStudyNumber() + "t");
System.out.print("姓名:" + s.getName() + "t");
System.out.print("年龄:" + s.getAge() + "t");
System.out.print("班级:" + s.getClassName() + "t");
System.out.println();
flag = false;
}
}
}
public static Student getStudentById(ArrayList students,String studyNumber){
//1.遍历所有学生对象
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
//2.询问当前遍历的这个学生对象的学号,是否是我们要找的学号
if(s.getStudyNumber().equals(studyNumber)){
return s;
}
}
return null;
}
}



