目录
一.APl(Application Programming Interface,应用程序编程接口)
2.string类创建对象的2种方式string类常见面试题
一.APl(Application Programming Interface,应用程序编程接口)
1.Java写好的技术(功能代码),咱们可以直接调用。
2.Oracle也为Java提供的这些功能代码提供了相应的API文档(技术使用说明书
String简单介绍
String类定义的变量可以用于存储字符串,同时String类提供了很多操作字符串的功能,我们可以直接使用。
二.String
1.string类概述
String概述
java.lang.String类代表字符串,String类定义的变量可以用于指向字符串对象,然后操作该字符串。
Java程序中的所有字符串文字(例如“abc”)都为此类的对象。
String name = "小H";
String schoolName ="公主真好看";
String类的特点详解
String其实常被称为不可变字符串类型,它的对象在创建后不能被更改。
package com.wjh.String;
/*
目标:了解String类的特点:String不可变的原理
*/
public class StringDemo1 {
public static void main(String[] args) {
String name = "喂";
name += "言西"; //name=name+"言希";
name += "你好呀";
System.out.println(name);//喂言西你好呀
}
}
字符串对象存在哪里?
以""方式给出的字符串对象,在字符串常量池中存储。
2.string类创建对象的2种方式string类常见面试题
创建字符串对象的2种方式
方式一:直接使用“”定义。(推荐方式)
String name ="公主真好看";
方式二:通过String类的构造器创建对象。
package com.wjh.String;
/*
目标:String类创造字符串对象的2中方式
*/
public class StringDemo1 {
public static void main(String[] args) {
//方式一:直接使用双引号得到字符串对象
String name = "言希西";
System.out.println(name);
//方式二:
//public String();创建一个空白字符串对象,不含有任何内容(几乎不用)
String s1 = new String(); //s1 = " ";
System.out.println(s1);
//public String(String); 根据传入的字符串内容,来创建字符对象(几乎不用)
String s2 = new String("想见见你");
System.out.println(s2);
//public String(char[] c);根据字符数组的内容,来创建字符串对象
char[] chars = {'我','l','k','你'};
String s3 = new String(chars);
System.out.println(s3);
//public String(byte[] b);根据字节数组的内容,来创建字符串对象
byte[] bytes = {97,98,99,65,66,67};
String s4 = new String(bytes);
System.out.println(s4);
System.out.println("----------------------");
}
}
言希西
想见见你
我lk你
abcABC
----------------------
有什么区别吗?(面试常考)
以" "方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份。
package com.wjh.String;
public class StringDemo1 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "a"+"b"+"c";
//String s3 = "c";
System.out.println(s1 == s2); //true
System.out.println("----------------");
String s = "abc";
String s3 = "ab";
String s4 = s2+"c";
System.out.println(s == s4); //false
}
}
3.String类常用API-字符串内容比较
字符串的内容比较
package com.wjh.String;
import java.util.Scanner;
public class StringDemo1 {
public static void main(String[] args) {
//1.正确登录名和密码
String UserName = "steerink";
String password = "123456";
//2.请您输入登入名称和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入账号名称:");
String name = sc.next();
System.out.println("请输入账号密码:");
String pass = sc.next();
//3.判断用户输入的登入名称与正确的内容是否相等
if(UserName == pass && password == pass){
System.out.println("登入成功!");
}else{
System.out.println("登入失败,账号或密码有误!");
}
}
}
结论:字符串的内容比较不适合用“==”比较。
字符串的内容比较:
推荐使用String类提供的“equals”比较:只关心内容一样即可
package com.wjh.String;
import java.util.Scanner;
public class StringDemo1 {
public static void main(String[] args) {
//1.正确登录名和密码
String UserName = "steerink";
String password = "123456";
//2.请您输入登入名称和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入账号名称:");
String name = sc.next();
System.out.println("请输入账号密码:");
String pass = sc.next();
//3.判断用户输入的登入名称与正确的内容是否相等
if(UserName.equals(name) && password.equals(pass)){
/*
if不能判断 定义字符串值 和 输入字符串值 的比较,因为 定义字符串值
是存储在堆内存当中,而 输入字符串值 是存储在栈内存当中,两者的地址不一样
定义字符串值 == 输入字符串值 ---换成--> 定义字符串值.equals(输入字符串值)
*/
System.out.println("登入成功!");
}else{
System.out.println("登入失败,账号或密码有误!");
}
//4.忽略比较内容的API:一般用于比较验证码这样的业务逻辑
String okCode = "FH4i5j";
String code = "fh4I5j";
System.out.println(okCode.equalsIgnoreCase(code)); //定义字符串值.equalsIgnoreCase(输入字符串值):意为忽略大小写 //true
}
}
4.String类常用API-遍历、替换、截取、分割操作
String常用API
package com.wjh.String;
import java.util.Scanner;
public class StringDemo1 {
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):获取某个索引位置处的字符
System.out.println(name.charAt(1)); //索引 //爱
System.out.println("---------遍历字符串中的每个字符--------");
for (int i = 0; i < name.length(); i++) {
char ch = name.charAt(i);
System.out.println(ch);
}
System.out.println("------");
// 3、public char[] toCharArray(): :把字符串转换成字符数组
char[] chars = name.toCharArray();
for (int i = 0; i < name.length(); i++) {
System.out.println(chars[i]);
}
System.out.println("--------");
// 4、public string substring(int beginIndex, int endIndex):截取内容包,前不包后的
String name2 = "Java是最厉害的编程语言不接受反驳";
String rs = name2.substring(4, 9);
System.out.println(rs);
// 5、public String substring(int beginIndex):从当前索引一直截取到末尾
String rs1 = name2.substring(4);
System.out.println(rs1);
// 6、public String replace(CharSequence target,CharSequence replacement)
String name3 = "希希子是最好看的公主,永远热爱!永远热泪!";
String rs3 = name3.replace("永远","**");
System.out.println(rs3);
// 7、public boolean contains(CharSequence s)
System.out.println(name3.contains("永远"));
// 8、public boolean startsWiths(String prefix)
System.out.println(name3.startsWith("希"));
// 9、 public String[] split(String s):按照某个内容把字符串分割成字符串数组返回。
String name4 = "希希子,言希,U.";
String[] names = name4.split(",");
for (int i = 0; i < names.length; i++) {
System.out.println("喂言希关注了:"+names[i]);
}
}
}
9
爱
---------遍历字符串中的每个字符--------
我
爱
你
中
国
l
o
v
e
------
我
爱
你
中
国
l
o
v
e
--------
是最厉害的
是最厉害的编程语言不接受反驳
希希子是最好看的公主,**热爱!**热泪!
true
true
喂言希关注了:希希子
喂言希关注了:言希
喂言希关注了:U.
5.string类案例实战
package com.wjh.String;
/*
练习题:使用String完成随机生成5位的验证码。
*/
import java.util.Random;
public class StringDemo1 {
public static void main(String[] args) {
// 1、定义可能出现的字符信息
String dates = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
//2.循环5次,每次生成一个随机的索引,提取对应的字符连接起来即可
String code = "";
Random r = new Random();
for (int i = 0; i < 5; i++) {
//随机一个索引
int index = r.nextInt(dates.length());
char c = dates.charAt(index);
code += c;
}
//3.输出字符串变量即可
System.out.println(code);
}
}
package com.wjh.String;
/*
练习题:模拟用户登录
*/
import java.util.Random;
import java.util.Scanner;
public class StringDemo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//1.定义正确的登录名称
String okName = "admin";
String okPassword = "123456";
//2.定义一个循环循环3次,让用户登录
for (int i = 2; i >= 0; i--) {
System.out.println("请输入账号:");
String name = sc.next();
System.out.println("请输入密码:");
String pass = sc.next();
if(okName.equals(name) && okPassword.equals(pass)){
System.out.println("登入成功!");
break;
}else{
if(i == 0){
System.out.println("账号或密码输入错误!");
break;
}
System.out.println("账号或密码输入错误!您还有"+i+"次机会!");
}
}
System.out.println("程序结束!");
}
}
package com.wjh.String;
/*
练习题:模拟用户登录
*/
import java.util.Random;
import java.util.Scanner;
public class StringDemo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//1.定义正确的登录名称
String okName = "15570033903";
String okPassword = "123456";
//2.定义一个循环循环3次,让用户登录
for (int i = 2; i >= 0; i--) {
System.out.println("请输入账号:");
String name = sc.next();
System.out.println("请输入密码:");
String pass = sc.next();
if(okName.equals(name) && okPassword.equals(pass)){
System.out.println("登入成功!");
String name1 = "****";
String nameNoq = okName.substring(0,3);
String nameNoh = okName.substring(7,11);
System.out.println("欢迎会员"+nameNoq+"****"+nameNoh+"进入系统");
break;
}else{
if(i == 0){
System.out.println("账号或密码输入错误!");
break;
}
System.out.println("账号或密码输入错误!您还有"+i+"次机会!");
}
}
System.out.println("程序结束!");
}
}
三.ArrayList简单介绍
ArrayList代表的是集合类,集合是一种容器,与数组类似,不同的是集合的大小是不固定的。
通过创建ArrayList的对象表示得到一个集合容器,同时ArrayList提供了比数组更好用,更丰富的API(功能)给程序员使用。
1.集合概述
集合是与数组类似,也是一种容器,用于装数据的。
数组的特点
数组定义完成并启动后,类型确定、长度固定。
问题:在个数不能确定,且要进行增删数据操作的时候,数组是不太合适的
集合的特点
1.集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。
2.集合非常适合做元素个数不确定,且要进行增删操作的业务场景。
3.集合的提供了许多丰富、好用的功能,而数组的功能很单一。
2.ArrayList集合快速入门
ArrayList集合
ArrayList是集合中的一种,它支持索引。(暂时先学习这个,后期课程会学习整个集合体系)
ArrayList集合的对象获取
ArrayList集合添加元素的方法
package com.wjh.String;
/*
目标:创建ArrayList对象,代表集合容器,往里面添加元素。
*/
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class StringDemo1 {
public static void main(String[] args) {
//1.创建ArrayList集合的对象
ArrayList list = new ArrayList();
//2.往里面添加数据
list.add("Java");
list.add("Java");
list.add("MySql");
list.add("言希");
list.add(23);
list.add(20.5);
list.add(false);
System.out.println(list.add('中'));
System.out.println(list);
//3.给指定索引位置插入元素
list.add(1,"希希子");
System.out.println(list);
}
}
true
[Java, Java, MySql, 言希, 23, 20.5, false, 中]
[Java, 希希子, Java, MySql, 言希, 23, 20.5, false, 中]
3.ArrayList对泛型的支持
泛型概述
ArrayList<E>:其实就是一个泛型类,可以在编译阶段约束集合对家只能探作呆l数掂尖型。
举例:
1.ArrayList<String> :此集合只能操作字符串类型的元素。
2.ArrayList<lnteger>:此集合只能操作整数类型的元素。
注意:集合中只能存储引用类型,不支持基本数据类型。
package com.wjh.String;
/*
目标:能够使用泛型约束ArrayList集合的数据类型
*/
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class StringDemo1 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("Java");
list.add("MySql");
ArrayList<Integer> list1 = new ArrayList(); //JDK 1.7开始,泛型后面的类型申明可以不写
/*
不支持基本数据类型int double...
*/
list1.add(23);
list1.add(100);
}
}
4.ArrayList常用API、遍历
ArrayList集合常用方法
package com.wjh.String;
/*
目标:掌握ArrayList集合的常用API
*/
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class StringDemo1 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList();
list.add("Java");
list.add("Java");
list.add("MySql");
list.add("MyBatis");
list.add("JavaScript");
list.add("HTML");
//1.public E get(int index)返回指定索引处的元素
String e = list.get(3);
String e2 = list.get(2);
System.out.println(e);
System.out.println(e2);
//2.public int size() 返回集合中的元素的个数
System.out.println(list.size());
System.out.println("-----------");
//3.集合的遍历
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
//4.public E remove(int index)删除指定索引处的元素,返回被删除的元素
System.out.println(list); //[Java, Java, MySql, MyBatis, JavaScript, HTML]
String e3 = list.remove(1);
System.out.println(list); //[Java, MySql, MyBatis, JavaScript, HTML]
//5.public boolean remove(Object o)删除指雇赠元素,返回删除是否成功
System.out.println(list);
System.out.println(list.remove("MyBatis")); //true
System.out.println(list); //[Java, MySql, JavaScript, HTML]
ArrayList<String> list1 = new ArrayList<>();
list1.add("java");
list1.add("贾宝玉");
list1.add("java");
list1.add("Mysql");
System.out.println(list1); //[java, 贾宝玉, java, Mysql]
//集合中相同的值用list.remove()只会删除第一次出现的这个元素值,后面的不删除
System.out.println(list1.remove("java")); //true
System.out.println(list1); //[贾宝玉, java, Mysql]
//6.public E set(int index,E element)修改指定索引处的元素,返回被修改的元素
String e4 = list1.set(0,"王熙凤");
System.out.println(e4); //贾宝玉
System.out.println(list1); //[王熙凤, java, Mysql]
}
}
5.ArrayList集合案例:遍历并删除元素
package com.wjh.String;
/*
需求:S2211班的成绩为:[98, 77, 66, 89, 79, 50, 100],现在需要把80分以下的成绩数据去掉
*/
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class StringDemo1 {
public static void main(String[] args) {
//1.创建一个ArrayList集合存储一个班的成绩
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("S2211班的成绩为:"+list); //S2211班的成绩为:[98, 77, 66, 89, 79, 50, 100]
//2.把低于80分的成绩从集合中去掉
//代码有问题
// for (int i = 0; i < list.size(); i++) {
// Integer score = list.get(i);
// if(score < 80){
// //这个分数必须删除
// list.remove(score);
// }
// }
// System.out.println("S2211班的成绩80以上为:"+list);
System.out.println("1.完美的方案:");
for (int i = 0; i < list.size(); i++) {
Integer score = list.get(i);
if(score < 80){
//这个分数必须删除
list.remove(i);
i--; //删除成功后,这样可以保证下次回到这个位置,如此不会跳过数据
}
}
System.out.println("S2211班的成绩80以上为:"+list);//[98, 89, 100]
/*
System.out.println("2.完美的方案");
//从后面倒着遍历再删除就可以
for (int i = list.size()-1; i >= 0; i--) {
Integer score2 = list.get(i);
if(score2 < 80){
//这个分数必须删除
list.remove(i);
}
}
System.out.println(list);
*/
}
}
6.ArrayList集合案例:存储自定义类型的对象
test.java
package com.wjh.String;
/*
需求:某影院系统需要在后台存储上述三部电影,然后依次展示出来。
需求:定义电影类(名称,分值,演员),
创建3个电影对象,代表三部影片,存入集合中并遍历。
《肖生克的救赎》,9.7,罗宾斯
《霸王别姬》,9.6,张国荣、张丰毅
《阿甘正传》,9.5,汤姆.汉克斯
*/
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class StringDemo1 {
public static void main(String[] args) {
//目标:理解ArrayList集合存储自定义类型的对象
//1.定义电影类
//2.访问电影类,创建3个电影对象
Movie m1 = new Movie("《肖生克的救赎》",9.7,"罗宾斯");
Movie m2 = new Movie("《霸王别姬》",9.6,"张国荣、张丰毅");
Movie m3 = new Movie("《阿甘正传》",9.5,"汤姆.汉克斯");
//3.创建一个电影类型的ArrayList集合,存储三部电影对象
ArrayList<Movie> movies = new ArrayList<>();
movies.add(m1);
movies.add(m2);
movies.add(m3);
System.out.println(movies); //[com.wjh.String.Movie@3b07d329, com.wjh.String.Movie@41629346, com.wjh.String.Movie@404b9385]
//4.遍历电影类的集合中的每个电影对象,访问他的信息即可
for (int i = 0; i < movies.size(); i++) {
//i = 0 1 2
Movie m = movies.get(i);
System.out.println("电影名称:"+m.getName());
System.out.println("电影评分:"+m.getScore());
System.out.println("电影主演:"+m.getActor());
System.out.println("--------------------");
}
}
}
Movie.java
package com.wjh.String;
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;
}
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;
}
}
控制台:
[com.wjh.String.Movie@3b07d329, com.wjh.String.Movie@41629346, com.wjh.String.Movie@404b9385]
电影名称:《肖生克的救赎》
电影评分:9.7
电影主演:罗宾斯
--------------------
电影名称:《霸王别姬》
电影评分:9.6
电影主演:张国荣、张丰毅
--------------------
电影名称:《阿甘正传》
电影评分:9.5
电影主演:汤姆.汉克斯
--------------------
进程已结束,退出代码为 0
结论:集合中存储的元素并不是对象本身,而是对象的地址。
7.ArrayList集合案例:元素搜索
test.java
package com.wjh.String;
/*
案例:学生信息系统:展示数据,并按照学号完成搜索学生类信息(学号,姓名,性别,班级>
测试数据:
"20180302","叶孤城",23,"护理一班”
"20180303","东方不败”,23,"推拿二班”
"20180304","西门吹雪",26,"中药学四班"
"20180305","梅超风",26,"神经科2班”
*/
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class StringDemo1 {
public static void main(String[] args) {
//1.定义学生类
//2.创建集合存储学生对象,创建学生对象封装学生信息
//把学生对象添加到集合中去
Student s1 = new Student("2208", "周扒皮", 23, "管理08");
Student s2 = new Student("2205", "林貂毛", 21, "教育05");
Student s3 = new Student("2206", "枭雄鸿", 28, "经济06");
Student s4 = new Student("2201", "欧巴王", 18, "信息01");
ArrayList<Student> students = new ArrayList<>();
students.add(s1);
students.add(s2);
students.add(s3);
students.add(s4);
System.out.println("学号" + "\t\t\t" + "姓名" + "\t\t\t" + "年龄" + "\t\t" + "班级");
//3.遍历学生信息展示。
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
System.out.print(s.getId() + "\t\t");
System.out.print(s.getName() + "\t\t");
System.out.print(s.getAge() + "\t\t");
System.out.print(s.getClassName() + "\t\t");
System.out.println();
}
Scanner sc = new Scanner(System.in);
while (true){
System.out.println("请输入学号查询学生信息:");
String id = sc.next();
//5.调用查询方法
Student s = getStudent(students,id);
//6.判断s是否存在对象地址
if(s == null){
System.out.println("查无此人!");
}else{
System.out.println("您查询的信息如下:");
System.out.println("学号" + "\t\t\t" + "姓名" + "\t\t\t" + "年龄" + "\t\t" + "班级");
System.out.print(s.getId() + "\t\t");
System.out.print(s.getName() + "\t\t");
System.out.print(s.getAge() + "\t\t");
System.out.print(s.getClassName() + "\t\t");
System.out.println();
}
}
}
//4.定义方法完成按照学号的搜索功能
public static Student getStudent(ArrayList<Student> students, String id) {
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
//2.询问当前遍历的这个学生对象的学号,是否是我们要找的学号
if (s.getId().equals(id)) {
//这个s代表的学生对象,就是我们要找的,返回它
return s;
}
}
//查无此人
return null;
}
}
Student.java
package com.wjh.String;
public class Student {
private String id;
private String name;
private int age;
private String className;
public Student() {
}
public Student(String id, String name, int age, String className) {
this.id = id;
this.name = name;
this.age = age;
this.className = className;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
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;
}
}
控制台:
学号 姓名 年龄 班级
2208 周扒皮 23 管理08
2205 林貂毛 21 教育05
2206 枭雄鸿 28 经济06
2201 欧巴王 18 信息01
请输入学号查询学生信息:
2200
查无此人!
请输入学号查询学生信息:
2209
查无此人!
请输入学号查询学生信息:
2201
您查询的信息如下:
学号 姓名 年龄 班级
2201 欧巴王 18 信息01
进程已结束,退出代码为 0