08 API、String

一、API

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

image

二、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"。

image

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

图解:
image

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
    }
}

image

posted @ 2021-07-18 18:11  uoi  阅读(73)  评论(0)    收藏  举报