(以下内容全部来自上述课程)
1.API
(Application Programming Interface 应用程序编程接口)
1.简单理解
简单理解:API就是别人已经写好的东西,我们不需要自己编写,直接使用即可。
Java API:指的就是JDK中提供的各种功能的Java类。
这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。
已经学习过的API:
Scanner 键盘录入
Random 随机数
2.API帮助文档
帮助开发人员更好的使用API和查询API的一个工具。
使用方法:
- 打开API帮助文档
- 点击显示,并找到索引下面的输入框
- 在输入框中输入类名并点击显示
- 查看类所在的包:java.util(比如),就需要导包
- 查看类的描述
- 查看构造方法
- 查看成员方法
2.字符串
1.String
java.lang(不需要导包).String类代表字符串,Java程序中的所有字符串文字(例如"abc")都为此类的对象。
注意点:
字符串的内容是不会发生改变的,它的对象在创建后不能被更改。
字符串拼接会产生一个新的字符串。
2.创建String对象的两种方式
1.直接赋值(常用)
String name = “尼古拉斯”;
2.new
public String() 创建空白字符串,不含任何内容
public String(String original) 根据传入的字符串,创建字符串对象
public String(char[ ] chs) 根据字符数组,创建字符串对象
public String(byte[ ] chs) 根据字节数组,创建字符串对象
package String;
public class StringDemo1 {
public static void main(String[] args) {
//1.使用直接赋值的方式,创建一个字符串对象
//"abc" 双引号引起来的内容,就是一个字符串
String s1 = "abc";
System.out.println(s1);
//2.使用new的方式来获取一个字符串对象
//空参构造:可以获取一个空白字符串对象,里面不含有任何内容
String s2 = new String();
System.out.println("@"+s2+"!");
//传递一个字符串,根据传递的字符串,在堆内存中,创建一个字符串对象
String s3 = new String("abc");
System.out.println(s3);
//传递一个字符数组,根据传递的字符数组,在堆内存中,创建一个字符串对象
//需求:我要修改字符串的内容。 abc Qbc
//abc--->>char[] chs = {'a','b','c'}--->{'Q','b','c'}---->>"Qbc"
char[] chs = {'a','b','c'};
String s4 = new String(chs);
System.out.println(s4); //abc
//传递一个字节数组,根据传递的字节数组,在堆内存中,创建一个字符串对象
//应用场景:以后在网络当中传输的数据其实都是字节信息
//我们一般要把字节信息进行转换,转成字符串,此时就要用到这个构造了。
byte[] bys = {97,98,99};
String s5 = new String(bys);
System.out.println(s5); //abc
}
}
3.String的内存分析
1.串池
只存储直接赋值的字符串
2.直接赋值的内存图
当使用双引号直接赋值时,系统会检查该字符串在串池中是否存在。
不存在:创建新的。
存在:复用。
3.new的内存图
每new一次就在堆里开辟一块新的小空间。
代码不复用。
4.字符串的比较
1.==号比的到底是什么?
基本数据类型比较的是数据值。
引用数据类型比较的是地址值。
也就是字符串的比较,字符串内内容相同的情况下,俩赋值必相等,一赋值一new不相等,俩new也不相等。
2.比较方法
- boolean equals方法(要比较的字符串) 完全一样的结果才是true。否则为false
- boolean equalslgnoreCase(要比较的字符串) 忽略大小写的比较
package String;
public class StringDemo2 {
public static void main(String[] args) {
//1.创建两个字符串对象
String s1 = new String("abc");
String s2 = "Abc";
//2.==号比较
//比较基本数据类型:比较的是具体的值
//比较引用数据类型:比较的是对象地址值
System.out.println(s1 == s2); //false
System.out.println("--------");
//3.equals()方法
//比较基本数据类型:比较的是具体的值
//比较引用数据类型:比较的是对象地址值
System.out.println(s1.equals(s2)); //false
System.out.println("--------");
//4.equalsIgnoreCase()方法:忽略大小写
//忽略大小写只能是英文状态下的a 和 A
//比较基本数据类型:比较的是具体的值
//比较引用数据类型:比较的是对象地址值
System.out.println(s1.equalsIgnoreCase(s2)); //true
System.out.println("--------");
}
}
小拓展:
键盘录入和直接赋值的也是不一样的。
键盘录入的本质就是new。
结论:以后只要是想比较字符串的内容,就必须要用String里面的方法。
3.练习
1.用户登录
需求:已知正确的用户名和密码,请用程序实现模拟用户登录。
总共给三次机会,登录之后,给出相应的提示。
package String;
import java.util.Scanner;
public class StringDemo3 {
public static void main(String[] args) {
//读题拆解法
//1.定义两个变量记录正确的用户名和密码
String username = "admin";
String password = "123456";
//4.给三次机会,让用户登录
for (int i = 0; i < 3; i++) {
//2.键盘录入用户名和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名:");
String name = sc.next();
System.out.println("请输入密码:");
String pwd = sc.next();
//3.比较
//3.1先比较用户名
//3.2再比较密码
//3.3如果都正确,提示登录成功
//3.4如果有一个错误,提示登录失败
if (name.equals(username) && pwd.equals(password)) {
System.out.println("登录成功");
break;
} else {
if (i == 2) {
System.out.println("您的账户已被锁定,请联系管理员");
} else {
System.out.println("登录失败,"+"您还剩"+(2-i)+"次机会");
}
}
}
}
}
2.遍历字符串
需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串
方法:
- public char charAt(int index):根据索引返回字符
- public int length():返回此字符串的长度
- 数组的长度:数组名.length
- 字符串的长度:字符串的对象.length()
package String;
import java.util.Scanner;
public class StringDemo4 {
public static void main(String[] args) {
//1.键盘录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.next();
//2.进行遍历
for(int i = 0; i < s.length(); i++){
//i 依次表示字符串的每一个索引
char c = s.charAt(i);
System.out.println(c);
}
}
}
3.统计字符次数
键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
package String;
import java.util.Scanner;
public class StringDemo5 {
public static void main(String[] args) {
//1.键盘录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.next();
//2.统计大写字母、小写字母、数字字符个数
int bigCount = 0;
int smallCount = 0;
int numberCount = 0;
for (int i = 0; i < s.length(); i++) {
//i 表示字符串中的每一个索引
char c = s.charAt(i);
if (c >= 'A' && c <= 'Z') {
//char类型的变量在参与计算的时候自动类型提升为int,查询ASCII表
bigCount++;
}
else if (c >= 'a' && c <= 'z') {
smallCount++;
}
else if (c >= '0' && c <= '9') {
numberCount++;
}
}
//3.输出结果
System.out.println("大写字母有"+bigCount+"个");
System.out.println("小写字母有"+smallCount+"个");
System.out.println("数字字符有"+numberCount+"个");
}
}
4.拼接字符串
定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。
例如:
数组为int[] arr = {1,2,3};
执行后的输出结果为:[1,2,3]
package String;
public class StringDemo6 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5};
String s = arrayToString(arr);
System.out.println(s);
}
//1.我要干嘛? 遍历数组并把数组拼接成字符串
//2.需要什么? 数组
//3.干完了需要返回么? 需要,返回一个拼接之后的字符串
public static String arrayToString(int[] arr){
if(arr == null){
return null;
}
if(arr.length == 0){
return "[]";
}
//当代码执行到这里表示什么?
//表示数组不是mull,也不是长度为0的数组
String s = "[";
for(int i = 0; i < arr.length; i++){
//i 索引 arr[i] 元素
if(i == arr.length - 1){ //最后一个元素直接拼接
s = s + arr[i];
}else{
s = s + arr[i] + ", "; //不是最后一个元素拼接逗号
}
}
s = s + "]";
return s;
}
}
5.反转
定义一个方法,实现字符串反转。
键盘录入一个字符串,调用该方法之后,在控制台输出结果。
例如:键盘录入abc,输出结果cba
package String;
public class StringDemo7 {
public static void main(String[] args) {
String s = "abc";
String s1 = reverse(s);
System.out.println(s1);
}
//1.我要干嘛? 把字符串反转
//2.需要什么? 字符串
//3.干完了需要返回么? 需要,返回一个反转之后的字符串
public static String reverse(String s) {
//abc
String result = "";
for (int i = s.length()-1; i >= 0; i--) {
//i 依次表示字符串的最后一个字符的索引,依次往前
char c = s.charAt(i);
result = result + c;
}
return result;
}
}
6.金额转换(较难)
2135 (逆推)----->> 零佰零拾零万贰仟壹佰叁拾伍元---->>零零零贰壹叁伍------->>贰壹叁伍
查表法:
思路很重要!!!
package String;
import java.util.Scanner;
public class Cash {
public static void main(String[] args) {
//1.键盘输入一个金额
Scanner sc = new Scanner(System.in);
int money = sc.nextInt();
while(true){
//2.判断金额是否合法
if(money >= 0 && money <= 9999999){
break;
} else{
System.out.println("输入金额有误");
}
}
//定义一个变量用来拼接最终的大写金额
String result = "";
//3.得到money里的每一位数字再转成中文
while(true){
//从右往左获取每一位数字
int ge = money % 10;
String s = digitToString(ge);
//把转换之后的大写拼接到result中
result = s + result;
//去掉刚刚获取的这一位数字
money = money / 10;
//如果数字上的每一位都获取过了,那么money就为0了,此时循环结束
if(money == 0){
break;
}
}
//4.在前面补全零
int count = 7 - result.length();
for(int i = 0; i < count; i++){
result = "零" + result;
} //零零零壹贰叁伍
//5.插入单位
//定义一个字符串数组表示单位
String[] arr = {"佰", "拾", "万", "仟", "佰", "拾", "元"};
// 零 零 零 贰 壹 叁 伍
String result2 = "";
//遍历result,依次得到每一位数字,然后跟单位拼接
for(int i = 0; i < result.length() ; i++){
char c = result.charAt(i);
//把大写数字和单位拼接到一起
result2 = result2+ c + arr[i];
}
//6.打印最终的结果
System.out.println(result2);
}
//1.我要干嘛? 把金额转换为大写
//2.需要什么? 金额
//3.干完了需要返回么? 需要,返回一个大写的字符串
public static String digitToString(int number) {
//1.定义一个字符串数组表示大写金额的每一位
String[] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
//2.返回对应的大写
return arr[number];
}
}
7.手机号屏蔽
13112349468 ----->> 131 **** 9468
方法:
String substring(int beginIndex,int endIndex) 截取
注意:包头不包尾,包左不包右
只有返回值才是截取的小串
String substring(int beginIndex) 截取到末尾
package String;
public class StringDemo8 {
public static void main(String[] args) {
//1.获取一个手机号
String phone = "13112349468";
//2.截取前三位
String s = phone.substring(0,3);
//3.截取后四位
String s1 = phone.substring(7);
//4.拼接
String result = s + "****" + s1;
System.out.println(result);
}
}
8.身份证号码信息查看
7~14位:出生年、月、日
17位:性别(奇数男,偶数女)
输出:
出生年月日:XXXX年X年X日
性别为:男/女
package String;
public class StringDemo9 {
public static void main(String[] args) {
//1.定义一个字符串记录身份证号码
String id = "11010119900307001X";
//2.获取出生年月日
String year = id.substring(6,10);
String month = id.substring(10,12);
String day = id.substring(12,14);
//3.拼接
String date = year + "年" + month + "月" + day + "日";
System.out.println(date);
//4.获取性别
char gender = id.charAt(16); //'3' ----> 3
//字符转换为数字
//利用ASCII码表
//'0' ---> 48
//'1' ---> 49
//'2' ---> 50
//'3' ---> 51
//...
//'9' ---> 57
int num = gender - 48;
//5.判断奇偶性
if(num % 2 == 0){
System.out.println("女");
} else{
System.out.println("男");
}
}
}
9.游戏骂人敏感词替换
方法:
String replace(旧值,新值) 替换
注意点:只有返回值才是替换之后的结果
package String;
public class StringDemo10 {
public static void main(String[] args) {
//1.获取到说的话
String s = "你玩的很好,以后不要再玩了,TMD";
//2.定义一个敏感词库
String[] arr = {"TMD", "CNM", "SB"};
//3.遍历敏感词库,依次跟要说的话比较
for(int i = 0; i < arr.length; i++){
//arr[i] 敏感词
if(s.contains(arr[i])){
s = s.replace(arr[i], "***");
}
}
//4.打印替换之后的结果
System.out.println(s);
}
}