08 API、String
一、API
java中的API
Java API是一本程序员的 字典 ,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。
API的使用步骤:
1.打开API文档
2.在索引中输入要查找的内容,比如: Random
3.查看类名/接口名称及包名
4.查看类/接口的功能描述
5.查看类的构造方法: 看懂参数列表,就可以通过构造方法创建对象了
6.看成员方法(没有static关键字修饰,只能由对象调用):
(1)方法名称:
(2)返回值类型:
(3)参数列表:

二、String类
2.1 String类的介绍
java.lang.String类: 用来描述的字符串的
说白了: String 类代表字符串。
Java 程序中的所有字符串字面值(字符串常量)(如 "abc" )都作为此类的实例实现(对象)。
字符串是常量;它们的值在创建之后不能更改(但凡是你感觉它要变化的时候,其实都是创建了一个新的字符串)。
String类的对象的体现形式:
1.所有双引号""引起来的内容,都是String类的对象,都可以调用String类中定义的方法
2.和前面一样,使用new关键字创建String类的对象
2.2 String的特点
1. 字符串不变:字符串的值在创建后不能被更改。
String s1 = "abc";
s1 += "d";//s1 = s1 + "d";
System.out.println(s1); // "abcd"
// 内存中有"abc","abcd"两个对象,s1从指向"abc",改变指向,指向了"abcd"。

2. 因为String对象是不可变的,所以它们可以被共享。
String s1 = "abc";
String s2 = "abc";
// 内存中只有一个"abc"对象被创建,同时被s1和s2共享。
图解:

3. "abc" 等效于 char[] data={ 'a' , 'b' , 'c' }
jdk8及以前: String内部使用的就是字符数组
jdk9及以后: String内部使用的就是字节数组
例如:
String str = "abc";
相当于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
// String底层是靠字符数组实现的。
2.3 String类的构造方法
1.public String(): 创建一个空白字符串对象,不含有任何内容,等价于""
2.public String(char[] chs) 根据构造方法字符数组chs,创建一个字符串对象
3.public String(byte[] bs): 根据构造方法字节数组bs,创建一个字符串对象
4.String s = “abc”; 直接赋值的方式创建字符串对象,内容就是abc
5.public String(String str): 给构造方法参数字符串对象str,创建一个副本(备份)
2.4 String类的判断方法
(1) public boolean equals(Object anObject) :将此字符串(调用分的对象)与指定对象(传递给方法的参数)进行比较内容是否相同, 区分大小写。
举例:
s1.equals(s2):比较s1和s2的内容是否一模一样,如果一样返回true,否则返回false
(2) public boolean equalsIgnoreCase (String anotherString) :将此字符串与指定对象进 行比较内容是否相同,忽略大小写。
举例:
s1.equalsIgnoreCase(s2):比较s1和s2的内容是否相同,但是不区分大小写
(3) public boolean contains(String str) : 当且仅当此字符串包含指定的str时,返回 true。
举例:
s1.contains(s2): s1中包含s2,返回true,不包含返回false
2.5 String类的练习-用户登录案例
package itheima;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
/*需求:
已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示
实现步骤:
1.定义两个String变量rUser和rPass,并分别初始化,代表已经注册好的用户名(rUser)和密码(rPass)
2.创建键盘录入Scanner类的对象
3.因为循环次数确定,使用for循环(作用: 保证总共给三次机会)
3.1 获取用户输入的登录用的用户名和密码,保存String变量inUser(登录用户名)和inPass(登录密码)中
3.2 判断 注册用户名 和 登录用户名相同 并且注册密码和登录密码也相同 提示 "登录成功" 然后break结束循环
3.3 如果登录用户名 或者 密码 不正确 提示"登录失败" 同时提示"剩余登录次数"*/
login(3);
}
//登录功能
public static void login(int count) {
Scanner sc = new Scanner(System.in);
for (int i = 1; i <= count; i++) {
System.out.println("请输入用户名:");
String inUser = sc.nextLine();
System.out.println("请输入密码:");
String inPass = sc.nextLine();
if (isEquals(inUser, inPass)) {
System.out.println("登录成功");
System.out.println("欢迎使用");
break;
} else {
System.out.println("用户名或密码错误");
if (i == count) {
System.out.println("登录失败,账户被冻结");
} else {
System.out.println("您还有" + (count-i) + "次机会");
}
}
}
}
//判断登录用户名和密码是否和已存的用户名和密码是否一致
public static boolean isEquals(String user, String pass) {
String rUser = "admin", rPass = "123";
if (user.equals(rUser) && (pass.equals(rPass))) {
return true;
} else {
return false;
}
}
}
2.6 String类的获取方法
(1) public int length () :返回此字符串的长度。
举例:s.length() 获取s中的字符的数量
(2) public String concat (String str) :将指定的字符串连接到该字符串的末尾。
举例:s1.concat(s2) 把s2连接到s1的末尾 等价于 s1 += s2
(3) public char charAt (int index) :返回指定索引处的 char值。
举例:s1.charAt(5) 获取s1中索引为5的字符
(4) public int indexOf (String str) :返回指定子字符串第一次出现在该字符串内的索引。
举例:s1.indexOf(s2) 查找s2在s1中第一次出现的位置,如果不存在,返回-1
(5) public String substring (int beginIndex) :返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。
举例:s1.substring(5) 截取s1字符串从索引5开始一直到最后的内容
(6) public String substring (int beginIndex, int endIndex) :返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。
举例:s1.substring(5,10) 截取s1字符串从索引5开始一直到索引10之间的内容(包含5,不包含10)
2.7 String类的练习-拼接字符串
package itheima;
public class Demo06 {
/*需求:
定义一个方法,把int数组中的数据按照指定格式拼接成一个字符串返回,
调用该方法, 并在控制台输出结果。
例如
数组为 int[] arr = {10,20,30,50};
执行方法后的输出结果为:[10, 20, 30, 50]*/
public static void main(String[] args) {
int[] array = {1,2,3};
String str = getString(array);
System.out.println(str);
}
public static String getString(int[] array) {
String s ="";
s+="[";
for (int i = 0; i < array.length; i++) {
s+=array[i];
if (i != array.length - 1) {
s+=",";
}
}
s+="]";
return s;
}
}
2.8 String类的转换方法
(1) public char[] toCharArray () :把字符串变成对应的字符数组。
举例:s1.toCharArray() 把s1变成字符数组
(2) public byte[] getBytes () :把字符串变成对应的字节数组。
举例:s1.getBytes() 把s1变成字节数组
(3) public String replace (String oldStr, String newStr) :把字符串中的所有的oldStr替换成newStr。
举例:s1.replace("a","A") 把s1中的所有的"a"替换成"A"
2.9 String类的切割方法
public String[] split(String regex) :将此字符串按照给定的regex(规则)拆分为字符串数组
举例:
String[] "a,b,c,d".split(",") 把"a,b,c,d"按照逗号切割,将切割后的多个子字符串存入String[] 中
2.10 切割方法练习
package itheima;
import java.util.Arrays;
public class Demo09 {
/*"aa bb cc dd"
分割功能的方法
- public String[] split(String regex) :
将此字符串按照给定的regex(规则)拆分为字符串数组
举例:
String[] "a,b,c,d".split(",")
把"a,b,c,d"按照逗号切割,将切割后的多个子字符串存入String[] 中*/
public static void main(String[] args) {
String s = "aa bb cc dd";
String[] s1 = s.split(" ");
System.out.println(Arrays.toString(s1));
System.out.println("-------");
s="127.0.0.1";
s1 = s.split("\\.");
System.out.println(Arrays.toString(s1));
}
}
2.11 其他相关方法
java.lang.Character类: 代表字符
public static boolean isDigit(char ch): 确定指定字符是否为数字字符。
public static boolean isUpperCase(char ch): 确定指定字符是否为大写字母。
public static boolean isLowerCase(char ch): 确定指定字符是否为大写字母。
public static boolean isLetter(char ch): 确定指定字符是否为字母。
注意:
以上方法有static关键字,不能使用对象调用,只能使用类名Character直接调用
java.lang.String类: 代表字符串
public String toUpperCase(): 把字符串转换为大写字符串
public String toLowerCase(): 把字符串转换为大写字符串
public boolean startsWith(String s): 判断调用方法的字符串,是否以方法参数字符串开头
比如:
s1.startsWith("abc"): 判断字符串s1是否以"abc"开头
public boolean endsWith(String s): 判断调用方法的字符串,是否以方法参数字符串结尾
比如:
s1.endsWith("abc"): 判断字符串s1是否以"abc"结尾
注意:
以上方法没有static关键字,必须使用String的对象调用
2.12 创建字符串对象两种方式的区别(理解)
/*
创建字符串对象两种方式的区别(理解)
1.直接new的方式: 字符串变量中直接保存的对内存空间的地址值
2.直接""的方式: 字符串变量中直接保存的常量池中字符串常量对象的地址值
==的使用:
1.基本类型: 比较的是具体的数据值是否相同
2.引用类型: 比较的是地址值是否相同
*/
public class Demo01StringDiff {
public static void main(String[] args) {
char[] chs = {'a','b','c'};
String s1 = new String(chs);
String s2 = new String(chs);
String s3 = "abc";
String s4 = "abc";
System.out.println(s1 == s2);//false
System.out.println(s1 == s3);//false
System.out.println(s3 == s4);//true
System.out.println("---------------");
System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(s3));//true
System.out.println(s3.equals(s4));//true
}
}


浙公网安备 33010602011771号