API (Application Programming Interface,应用程序编程接口)
Java写好的程序(功能),咱们可以直接调用。
Oracle 也为Java提供的这些功能代码提供了相应的 API文档(使用说明书) 。
String
String类概述
java.lang.String 类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。
Java 程序中的所有字符串文字(例如“abc”)都为此类的对象。1 2 String name = "小黑" ; String schoolName = "元宇宙工程大学" ;
String类的特点详解
String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。
从下方代码可以看出字符串变量name指向的字符串对象,那为何还说字符串不可变呢?
1 2 3 4 String name = "元宇宙" ; name += "工程" ; name +="大学" ; System.out.println(name);
字符串对象存在哪里?以“”方式给出的字符串对象,在字符串常量池中存储。
String是什么,可以做什么? 字符串类型,可以定义字符串变量指向字符串对象。
String是不可变字符串的原因? String变量每次的修改其实都是产生并指向了新的字符串对象。原来的字符串对象都是没有改变的,所以称不可变字符串。
String类常用方法-字符串内容比较
1 2 3 4 5 6 7 8 9 10 11 12 13 14 public static void main (String[] args) { String username = "admin" ; Scanner scanner = new Scanner(System.in); System.out.print("请输入您的用户名:" ); String inputName = scanner.next(); System.out.println(username == inputName); System.out.println(username.equals(inputName)); System.out.println(username.equalsIgnoreCase(inputName)); }
String类的常用方法-遍历、替换、截取、分割操作
更多方法请见JDK API文档里String类的方法摘要
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 package study;import java.util.Arrays;public class Demo03 { public static void main (String[] args) { String str = "madongmei" ; System.out.println(str.length()); char c = str.charAt(2 ); System.out.println(c); char [] chars = str.toCharArray(); System.out.println(Arrays.toString(chars)); String s4 = str.substring(3 , 5 ); System.out.println(s4); String s5 = str.substring(3 ); System.out.println(s5); String s6 = str.replace("m" , "o" ); System.out.println(s6); String[] s7 = str.split("o" ); System.out.println(Arrays.toString(s7)); String adress = "河南省,新乡市,牧野区" ; String[] s8 = adress.split("," ); System.out.println(Arrays.toString(s8)); } }
String类案例实战 案例:String类开发验证码功能
需求:随机产生一个5位的验证码,每位可能是数字、大写字母、小写字母。
分析:
定义一个String类型的变量存储a-z、A-Z、0-9之间的全部字符。
循环5次,随机一个范围内的索引,获取对应字符连接起来即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package study;import java.util.Random;public class Demo04 { public static void main (String[] args) { String characterPool = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ; Random random = new Random(); String code = "" ; for (int i = 1 ; i <= 5 ; i++) { int index = random.nextInt(characterPool.length() + 1 ); code += characterPool.charAt(index); } System.out.println(code); } }
案例:模拟用户登录功能
需求:模拟用户登录功能,最多只给三次机会。
分析:
系统后台定义好正确的登录名称,密码。
使用循环控制三次,让用户输入正确的登录名和密码,判断是否登录成功,登录成功则不再进行登录;登录失败给出提示,并让用户继续登录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package study;import java.util.Scanner;public class Demo05 { public static void main (String[] args) { String username = "admin" ; String password = "123456" ; Scanner scanner = new Scanner(System.in); for (int i = 1 ; i <= 3 ; i++) { System.out.print("请输入用户名:" ); String usernameInput = scanner.next(); System.out.print("请输入密码:" ); String passwordInput = scanner.next(); if (username.equals(usernameInput) && password.equals(passwordInput)) { System.out.println("登陆成功!" ); break ; } else { System.out.println("登录失败,还有" + (3 -i) + "次机会" ); } } } }
案例:手机号码屏蔽
需求:键盘录入一个手机号,将中间四位号码屏蔽,最终效果为:158****3895
分析:
键盘录入一个字符串。
调用字符串对象的截取API,截取字符串前三位、后四位。
将前三位 连接“****”然后继续连接后四位,输出最终结果即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package study;import java.util.Scanner;public class Demo06 { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入11位手机号码:" ); String phone = scanner.next(); String a = phone.substring(0 , 3 ); String b = phone.substring(7 , 11 ); String phoneShow = a + "****" + b; System.out.println("手机号码脱敏后:" + phoneShow); } }
String类创建对象的2种方式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package study;public class Demo07 { public static void main (String[] args) { String name = "百里飞洋" ; System.out.println(name); String s1 = new String(); System.out.println(s1); System.out.println("@" +s1+"@" ); String s2 = new String("fly" ); System.out.println(s2); char [] chs = {'a' , 'b' , 'c' , 'd' }; String s3 = new String(chs); System.out.println(s3); byte [] bytes = {97 , 98 , 99 }; String s4 = new String(bytes); System.out.println(s4); } }
有什么区别吗?(面试常考)
以“”方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。
通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中。1 2 3 4 5 6 7 8 String s1 = "abc" ; String s2 = "abc" ; System.out.println(s1 == s2); char [] chs = {'a' , 'b' , 'c' };String s3 = new String(chs); String s4 = new String(chs); System.out.println(s3 == s4);
字符串对象的特点有哪些?
双引号创建的字符串对象,在字符串常量池中存储同一个。
通过new 构造器创建的字符串对象,在堆内存中分开存储。
String类常见面试题
问题:下列代码的运行结果是?1 2 3 4 5 6 7 8 public class Test2 { public static void main (String[] args) { String s2 = new String("abc" ); String s1 = "abc" ; System.out.println(s1 == s2); } }
1 2 3 4 5 6 7 8 public class Test3 { public static void main (String[] args) { String s1 = "abc" ; String s2 = "ab" ; String s3 = s2 + "c" ; System.out.println(s1 == s3); } }
1 2 3 4 5 6 7 8 public class Test4 { public static void main (String[] args) { String s1 = "abc" ; String s2 = "a" + "b" + "c" ; System.out.println(s1 == s2); } }
ArrayList 集合概述 集合是与数组类似,也是一种容器,用于装数据的。
数组的特点
数组定义完成并启动后,类型确定、长度固定。
问题:在个数不能确定,且要进行增删数据操作的时候,数组是不太合适的。
集合的特点
集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。
集合非常适合做元素个数不确定,且要进行增删操作的业务场景。
集合还提供了许多丰富、好用的功能,而数组的功能很单一。
数组和集合的元素存储的个数问题?
数组定义后类型确定,长度固定
集合类型可以不固定,大小是可变的。
数组和集合适合的场景
数组适合做数据个数和类型确定的场景
集合适合做数据个数不确定,且要做增删元素的场景
ArrayList集合快速入门
ArrayList类是如何创建集合对象的,如何添加元素?
public ArrayList()
public boolean add(E e)
public void add(int index, E element)
ArrayList对于泛型的支持
注意:泛型只能支持引用数据类型,不支持基本数据类型。 可浏览博文:包装类(基本概念和一些使用方法)
怎么去统一ArrayList集合操作的元素类型,泛型需要注意什么?
使用泛型:<数据类型>
创建集合对象都应该使用泛型。
ArrayList<String> list1 = new ArrayList();
泛型只能支持引用数据类型,不支持基本数据类型。
ArrayList常用方法、遍历 增删改查方法练习:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 package study;import java.util.ArrayList;public class Demo08 { public static void main (String[] args) { ArrayList<String> list = new ArrayList<>(); System.out.println(list); list.add("百里" ); list.add("飞洋" ); list.add("aaa" ); System.out.println(list); list.add(0 , "aaa" ); System.out.println(list); boolean b1 = list.remove("bbb" ); System.out.println(b1); System.out.println(list); boolean b2 = list.remove("aaa" ); System.out.println(b2); System.out.println(list); list.remove(2 ); System.out.println(list); list.set(1 , "守约" ); System.out.println(list); System.out.println(list.get(0 )); } }
控制台输出:
1 2 3 4 5 6 7 8 9 10 [] [百里, 飞洋, aaa] [aaa, 百里, 飞洋, aaa] false [aaa, 百里, 飞洋, aaa] true [百里, 飞洋, aaa] [百里, 飞洋] [百里, 守约] 百里
ArrayList类遍历元素?(List集合遍历的五种方式 )1 2 3 4 5 6 7 8 9 for (int i = 0 ; i < list.size(); i++) { System.out.println(list.get(i)); } for (String s1 : list) { System.out.println(s1); }
案例:遍历并删除元素值
需求:
某个班级的考试在系统上进行,成绩大致为:98, 77, 66, 89, 79, 50, 100
现在需要先把成绩低于80分以下的数据去掉。
分析:
定义ArrayList集合存储多名学员的成绩。
遍历集合每个元素,如果元素值低于80分,去掉它。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ArrayList<Integer> list = new ArrayList<>(); list.add(98 ); list.add(77 ); list.add(66 ); list.add(89 ); list.add(79 ); list.add(50 ); list.add(100 ); System.out.println(list); for (int i = 0 ; i < list.size(); i++) { if (list.get(i) < 80 ) { list.remove(i); i--; } } System.out.println(list);
1 2 3 4 5 6 for (int i = list.size() - 1 ; i >= 0 ; i--) { if (list.get(i) < 80 ) { list.remove(i); } }
从集合中遍历元素,并筛选出元素删除它,应该怎么解决? 从集合后面遍历然后删除,可以避免漏掉元素。
案例:存储自定义类型的对象
影片信息在程序中的表示
需求:某影院系统需要在后台存储上述三部电影,然后依次展示出来。
分析
定义一个电影类,定义一个集合存储电影对象。
创建3个电影对象,封装相关数据,把3个对象存入到集合中去。
遍历集合中的3个对象,输出相关信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 package study;public class Movie { private String name; private double score; private String area; private String type; private String director; private String actor; public Movie () { } public Movie (String name, double score, String area, String type, String director, String actor) { this .name = name; this .score = score; this .area = area; this .type = type; this .director = director; this .actor = actor; } 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 getArea () { return area; } public void setArea (String area) { this .area = area; } public String getType () { return type; } public void setType (String type) { this .type = type; } public String getDirector () { return director; } public void setDirector (String director) { this .director = director; } public String getActor () { return actor; } public void setActor (String actor) { this .actor = actor; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package study;import java.util.ArrayList;public class Demo10 { public static void main (String[] args) { ArrayList<Movie> movies = new ArrayList<>(); movies.add(new Movie("《隐入尘烟》" , 8.5 , "中国大陆" , "剧情" , "李睿珺" , "武仁林/海清/杨光锐/武赟志/李生甫" )); movies.add(new Movie("《霸王别姬》" , 9.6 , "中国大陆/中国香港" , "剧情/爱情" , "陈凯歌" , "张国荣/张丰毅/巩俐/葛优/英达" )); movies.add(new Movie("《千与千寻》" , 9.4 , "日本" , "剧情/动画/奇幻" , "宫崎骏" , "柊瑠美/入野自由/夏木真理/菅原文太/中村彰男" )); System.out.println(movies); for (int i = 0 ; i < movies.size(); i++) { Movie movie = movies.get(i); System.out.println("电影名:" + movie.getName()); System.out.println("评分:" + movie.getScore()); System.out.println("主演:" + movie.getActor()); System.out.println("======================" ); } } }
案例:元素搜索
学生信息系统的数据搜索
需求:后台程序需要存储如上学生信息并展示,然后要提供按照学号搜索学生信息的功能。
学号
姓名
年龄
班级
20180208
郑爽
31
月嫂班
20190302
吴亦凡
32
缝纫机班
20200405
李云迪
40
清洁工班
20210709
李易峰
35
造月饼班
分析:
定义Student类,定义ArrayList集合存储如上学生对象信息,并遍历展示出来。
提供一个方法,可以接收ArrayList集合,和要搜索的学号,返回搜索到的学生对象信息,并展示。
使用死循环,让用户可以不停的搜索。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 package study;public class Student { private int stuId; private String name; private int age; private String classroom; public Student () { } public Student (int stuId, String name, int age, String classroom) { this .stuId = stuId; this .name = name; this .age = age; this .classroom = classroom; } public int getStuId () { return stuId; } public void setStuId (int stuId) { this .stuId = stuId; } 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 getClassroom () { return classroom; } public void setClassroom (String classroom) { this .classroom = classroom; } @Override public String toString () { return "Student{" + "stuId=" + stuId + ", name='" + name + '\'' + ", age=" + age + ", classroom='" + classroom + '\'' + '}' ; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package study;import java.util.ArrayList;import java.util.Scanner;public class Demo11 { public static void main (String[] args) { ArrayList<Student> students = new ArrayList<>(); students.add(new Student(20180208 , "郑爽" , 31 , "月嫂班" )); students.add(new Student(20190302 , "吴亦凡" , 32 , "缝纫机班" )); students.add(new Student(20200405 , "李云迪" , 40 , "清洁工班" )); students.add(new Student(20210709 , "李易峰" , 35 , "造月饼班" )); for (Student student : students) { System.out.println(student); } Scanner scanner = new Scanner(System.in); while (true ) { System.out.print("请输入要找的学号:" ); int id = scanner.nextInt(); boolean b = false ; for (int i = 0 ; i < students.size(); i++) { Student student = students.get(i); if (student.getStuId() == id) { b = true ; System.out.println("该学生已找到,目前正在北京朝阳区派出所,信息如下 :" ); System.out.println(student); } } if (!b) { System.out.println("抱歉,该学生已出狱!" ); } } } }
【参考内容】:
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 百里飞洋 ! 技术内容: 若存在错误或不当之处,还望兄台不吝赐教,期待与您交流!