什么是API?
全称:应用程序编程接口(俗称:java自己写好的程序,提供给程序员使用,方便完成一些功能)
API文档:程序使用说明书
1.String
String是字符串类型,它定义的变量可以指向一个字符串对象
String是不可变的字符串(指定过后,如果改变属于重新创建,而并非在原有基础上进行更改)
1.1 String 创建对象的方式:
1.直接使用双引号围起来 (String name = "test")
2.new 构造器得到字符串对象
1.2 String创建对象两种方式的区别:
1.双引号给出的字符串对象,存在与堆内存中的常量池中,并且相同内容只存储一份。
2.new 字符串对象,每new一次均会在堆内存中产生一个字符串对象。
1.3 String 的常用方法(常用API)
背景: == 判断字符串对象是判断地址的,这样会引起很多业务问题。
必要性:判断字符串,在开发中更多时候希望判断内容是否相同,不在乎地址。
判断字符串内容:if (s1.equals(s2)) 表示对两个字符串内容做比较
equals 贪婪匹配
eequalsIgnoreCase 不贪婪匹配
结论:
- 之后只要是字符串进行内容比较,那必须使用字符串的equals方法。
- 在基本数据类型做比较时,那就使用 == 。 (如: int a =1 ; int b =2 ; a==b )
其他常用方法:
案例如下:
public class StringAPIOtherDemo5 {
public static void main(String[] args) {
//1. public int length():获取字符串的长度
String name ="我爱你中国love" ;
System.out.println("字符个数: " + name.length());
// 2、 public char charAt(int index):获取某个索引位置处的字符
char ch = name.charAt(1);
System.out.println(ch);
System.out.println(" -------遍历字符串中的每个字符--------");
for (int i= 0 ; i < name.length() ; i++) {
//i=012345678
char c = name.charAt(i);
System.out.println(c);
}
// 3. public char[] toCharArray(): 把字符串转换成数组
char[] chars = name.toCharArray();
System.out.println('\t');
for (int i = 0; i < chars.length; i++) {
System.out.println(chars[i]);
}
//4 public String substring (int beginindex, int endindex):截取内容,(包前不包后的,截取索引位只包含前面的,最后以为的不包含)
String s1= "Java是最生的编程语言之一~" ;
String rs = s1.substring (0,12);
System.out.println(rs);
//5 public string substring(int beginindex):从当前索号一直截取到未尾
String rs2 = s1.substring(5);
System.out.println(rs2);
//6. public String replace(CharSequence target, CharSequence replacement) :使用新值,替换字符串中的旧值,得到新的字符串
String s2 ="三胖哥是最牛的80后, 三胖哥的发型yyds,好想跟三胖哥一样!!" ;
String rs3 = s2.replace("三胖哥","***");
System.out.println(rs3);
// 7. public boolean contains (CharSequence s) 检测字符串中是否有指定字符
System.out.println(s2.contains("三胖哥")); //true
System.out.println(s2.contains("三胖哥1")); // false
// 8, public boolean startsWith(String prefix) 判断字符串以什么开始
System.out.println(s2.startsWith ("三胖哥")); // true
System.out.println(s2.startsWith("三胖")); //true
System.out.println(s2.startsWith("三胖2")); //talse
// 9、public String[] split(String s):按照某个内容把字符串分割成字符串数组返回。
String data ="王宝强、贾乃亮、蔡徐坤";
String[] names = data.split("、") ;
for (int i=0; i<names.length; i++) {
System.out.println("选择了"+ names[i]);
}
}
}
2.集合
集合:代表的是一种入容器,类似于数组。
集合特点:大小可变,类型可以不固定,功能更加强大,适合做元素个数不能确定,同时存在增删操作的业务场景。
2.ArrayList
ArrayList:是一种集合
特点:元素可以重复,元素存在索引。
如何构建ArrayList的对象代表一个集合容器,用来存储数据?
原理:public ArrayList() ; 解释:表示创建一个无参构造器
格式: ArrayList 集合名称 = new ArrayList();
泛型:集合支持泛型
作用:约束集合在编译阶段只能操作某种数据类型
格式:
- ArrayList list = new ArrayList(); //不使用泛型
- ArrayList<String> 集合名称 = new ArratList() ; //使用泛型定义 (建议规范均使用此方法)
注意:
- 集合和泛型都不支持基本数据类型,只能支持引用数据类型。
- 以后定义集合都应该采用泛型
- 问题:若集合就是什么类型都要存,则书写格式为: ArrayList<Object> list = new ArratList();
2.1 ArrayList集合常用方法
方法名 | 说明 | |
1 | public boolean add(E e) | 将指定的元素追加到此集合的末尾 |
2 | public void add(int index,E element) | 在此集合中的指定位置插入指定的元素 |
3 | public E get(int index) | 返回指定索引处的元素 |
4 | public int size() | 返回集合中的元素的个数 |
5 | public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
6 | public boolean remove(Object o) | 删除指定的元素,返回删除是否成功 |
7 | public E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
public class Test1 {
public static void main(String[] args) {
//add方法:
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Java");
list.add("Mysql");
list.add("HTML");
list.add("MyBatis");
System.out.println(list);
//list = [Java, Java, MySQL, MyBatis, HTML]
//1、public E get(int index):获取某个索引位置处的元素值
String ele = list.get(2);
System.out.println(ele);
// 2、public int size():获取集合的大小(元素个数)
System.out.println(list.size());
System.out.println("----------------");
// 3、完成集合的遍历
// list = [Java, Java, MySQL, MyBatis, HTML]
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// 4、public E remove(int index):删除某个索引位置处的元素值,并返回被删除的元素值
System.out.println("----------------");
String ele2 = list.remove(2);
System.out.println(ele2);
System.out.println(list);
// 5、public boolean remove(Object o):
// 直接删除元素值,删除成功返回true,删除失败返回false
// 注意:默认会删除第一次出现的这个数据!!
System.out.println(list.remove("java"));
System.out.println(list);
// 6、public E set(int index,E element):修改某个索引位置处的元素值。(很少用)
System.out.println(list.set(2,"前端"));
System.out.println(list);
2.2ArrayList 遍历
例题:
有一组成绩为:98, 77, 66, 89, 79, 50, 100
现在需要先把成绩低于80分以下的数据去掉。
解决上述问题方法:
- 遍历中在if 判断时采用 i-- (表示将索引位前移一位;否则存在下述图片问题)
- 或者从元素末尾向首位遍历 如: for (int i = list.size()-1 ; i >=0 ; i-- )
ArrayList存储自定义类型的对象:ArrayLIst<Student> list = new ArrayList(); Student 为自建类
注意:集合容器中存储的是每个对象在堆内存中的地址
例题:
学生信息系统:展示数据,并按照学号完成搜索
学生类信息(学号,姓名,性别,班级)
测试数据:
“20180302”,“叶孤城”,23,“护理一班”
“20180303”,“东方不败”,23,“推拿二班”
“20180304”,“西门吹雪”,26,“中药学四班”
“20180305”,“梅超风”,26,“神经科2班”
代码部分:
1.Student 类
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;
}
}
2. Test类 (在此包中调用上述Student)
/**
案例:学生信息系统:展示数据,并按照学号完成搜索
学生类信息(学号,姓名,性别,班级)
测试数据:
"20180302","叶孤城",23,"护理一班"
"20180303","东方不败",23,"推拿二班"
"20180304","西门吹雪",26,"中药学四班"
"20180305","梅超风",26,"神经科2班"
*/
public class Test3 {
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,"神经科2班"));
//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 studentNumber = sc.next();
Student s = getStudentById(students, studentNumber);
if (s == null){
System.out.println("对不起查无此人");
}else {
System.out.println("您查询的学生信息如下");
System.out.println(s.getStudyNumber()+"\t" + s.getName() + "\t" + s.getAge() + "\t" + s.getClassName());
}
}
}
public static Student getStudentById(ArrayList<Student> students,String studnetNumber){
// 1、遍历全部学生对象
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
// 2、询问当前遍历的这个学生对象的学号,是否是我们要找的学号
if (s.getStudyNumber().equals(studnetNumber)) {
// 这个s代表的学生对象,就是我们要找的:返回它
return s;
}
}
//查无此人
return null;
}
}
2.3 ArrayList 集合内存图