【初探Java之路 五 】Java基本语法 四

  • 👏作者简介:大家好,我是小白,一名Java练习生,喜欢唱跳rap篮球

  • 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦

  • 📝联系方式:19177258062,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬👀

目录

1. 引言

2.API

(1)API概述【理解】

(2)如何使用API帮助文档【应用】

 3.String类

(1)String类概述【理解】

(2)String类的特点【理解】

(3)String类的构造方法【记忆】

(4)创建字符串对象两种方式的区别【理解】

(5)字符串的比较【理解】

 A.==号的作用

 B.equals方法的作用

(6)用户登录案例【应用】

 A.案例需求

B.代码实现

(7)遍历字符串案例【应用】

 A.案例需求

 B.代码实现

(8)统计字符次数案例【应用】

 A.案例需求

B.代码实现

(9)字符串拼接案例【应用】

 A.案例需求

B.代码实现

(10)字符串反转案例【应用】

A.案例需求

B.代码实现

(11)帮助文档查看String常用方法【记忆】

 4.StringBuilder类

(1)StringBuilder类概述【理解】

(2)StringBuilder类和String类的区别【理解】

(3)StringBuilder类的构造方法【记忆】

(4)StringBuilder类添加和反转方法【记忆】

 (5)StringBuilder和String相互转换【应用】

(6)字符串拼接升级版案例【应用】

 A.案例需求

B.代码实现

(7)字符串反转升级版案例【应用】

 A.案例需求

B.代码实现

(8)帮助文档查看StringBuilder常用方法【记忆】

5.总结和下一步


1. 引言

        欢迎来到我们的Java之旅第五篇!今天,我们将探讨API、String类、StringBuilder类。这些知识点是Java编程的基石。准备好了吗?我们出发吧!🚀

 

2.API

(1)API概述【理解】

         API(Application Programming Interface,应用程序接口)就像是编程世界的菜单📜,告诉你每个功能(方法)如何使用。想象一下你在餐馆点菜,菜单上会告诉你每道菜的名字、原料和价格。同样,API告诉你一个类有哪些方法、每个方法的参数和返回值。

        例如,当你使用String类时,你可以查阅API文档,找到substring方法,它能帮你截取字符串的一部分。API文档会告诉你这个方法需要哪些参数,返回什么结果,这样你就知道如何正确使用它了。

 

(2)如何使用API帮助文档【应用】

  •  获取文档

 链接:https://pan.baidu.com/s/1MJUkwWf-0CVfvv_2ArTCRQ?pwd=c4cj 
提取码:c4cj 
--来自百度网盘超级会员V5的分享

  •  打开帮助文档

 

  •  找到索引选项卡中的输入框

  •  在输入框中输入Random

  •  看类在哪个包下

  •  看类的描述

  •  看构造方法

  •  看成员方法

 

 3.String类

(1)String类概述【理解】

        在Java中,String类用来表示字符串,也就是说,程序里所有用双引号括起来的文字(比如“abc”)都是String类的对象。你可以把String类想象成一个专门用来处理文字的工具箱。String类属于java.lang包,Java默认会自动导入这个包,所以你在使用String类的时候,不需要额外导入它。

 

(2)String类的特点【理解】

A.字符串不可变,它们的值在创建后不能被更改,如下下面的例子:

String str = "Hello";
str = "World";
System.out.println(str); // 输出:World

         解释: 当我们创建一个字符串str并赋值为“Hello”时,实际上是在内存中创建了一个String对象,其值是“Hello”。当我们将str的值改为“World”时,并不是修改原来的“Hello”对象,而是在内存中创建了一个新的String对象,其值是“World”。原来的“Hello”对象仍然存在,只是str现在引用了新的“World”对象。这就是字符串不可变的特性:每次修改都会生成新的对象,而不是修改原有对象。

 B.虽然 String 的值是不可变的,但是它们可以被共享,如下下面的例子:

String str1 = "Java";
String str2 = "Java";
System.out.println(str1 == str2); // 输出:true

         解释: 在上面的例子中,str1str2都被赋值为“Java”。因为字符串是不可变的,Java会在字符串池中存储这个“Java”字符串。当我们再次创建一个值为“Java”的字符串时,Java会检查字符串池,如果已经有相同的字符串,就会直接引用,而不是创建新的对象。因此,str1str2引用的是同一个字符串对象,这就是为什么str1 == str2返回true。这种共享机制可以节省内存。

 C.字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] ),如下下面的例子:

String str = "Hello";
char[] charArray = str.toCharArray();
for (char c : charArray) {
    System.out.print(c + " "); // 输出:H e l l o
}

         解释: 在上面的例子中,我们将字符串str转换成字符数组charArray,然后遍历并打印每个字符。从效果上看,字符串可以像字符数组一样被处理:可以通过索引访问每个字符,可以转换为字符数组等。但是在底层实现上,String类实际上是基于字节数组(byte[])实现的。字符数组和字节数组的转换是Java虚拟机(JVM)在后台处理的细节,对开发者来说是透明的。这样的设计是为了更高效地处理字符串数据。

 

(3)String类的构造方法【记忆】

  •  常用的构造方法
方法名说明
public String()创建一个空白字符串对象,不含有任何内容
public String(char[] chs)根据字符数组的内容,来创建字符串对象
public String(byte[] bys)根据字节数组的内容,来创建字符串对象
String s = “abc”;直接赋值的方式创建字符串对象,内容就是abc
  •  示例代码
public class StringDemo01 {
    public static void main(String[] args) {
        //public String():创建一个空白字符串对象,不含有任何内容
        String s1 = new String();
        System.out.println("s1:" + s1);

        //public String(char[] chs):根据字符数组的内容,来创建字符串对象
        char[] chs = {'a', 'b', 'c'};
        String s2 = new String(chs);
        System.out.println("s2:" + s2);

        //public String(byte[] bys):根据字节数组的内容,来创建字符串对象
        byte[] bys = {97, 98, 99};
        String s3 = new String(bys);
        System.out.println("s3:" + s3);

        //String s = “abc”;	直接赋值的方式创建字符串对象,内容就是abc
        String s4 = "abc";
        System.out.println("s4:" + s4);
    }
}

 

(4)创建字符串对象两种方式的区别【理解】

  •  使用双引号:这种方式会检查字符串池。
String str1 = "Hello";
String str2 = "Hello"; // str1 和 str2 引用同一个对象

         这种方式节省内存,因为相同内容的字符串会共享同一个对象。如果我们频繁创建相同内容的字符串,这种方式效率更高。

  • 使用new关键字:这种方式会创建一个新的字符串对象。
String str3 = new String("Hello"); // 每次都会创建一个新的对象

         这种方式每次都会创建一个新的对象,即使内容相同。在需要确保不同对象时,比如在某些特定操作中,我们可能需要这样做,但通常情况下这种方式比较耗费内存。

 

(5)字符串的比较【理解】

 A.==号的作用

  • 比较基本数据类型:比较的是具体的值

  • 比较引用数据类型:比较的是对象地址值,是否指向同一个对象

String a = "Hello";
String b = "Hello";
System.out.println(a == b); // true,a 和 b 引用同一个对象

String c = new String("Hello");
System.out.println(a == c); // false,a 和 c 是不同的对象

         使用==号时,它比较的是对象的引用,判断两个变量是否指向同一个对象。这在判断对象是否完全相同时很有用,但在比较字符串内容时并不可靠。

 

 B.equals方法的作用

  •  方法介绍
public boolean equals(String s)     比较两个字符串内容是否相同、区分大小写
  • 示例 
String a = "Hello";
String c = new String("Hello");
System.out.println(a.equals(c)); // true,a 和 c 的内容相同

 

(6)用户登录案例【应用】

 A.案例需求

        已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示

 

B.代码实现

/*
    思路:
        1:已知用户名和密码,定义两个字符串表示即可
        2:键盘录入要登录的用户名和密码,用 Scanner 实现
        3:拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示。字符串的内容比较,用equals() 方法实现
        4:用循环实现多次机会,这里的次数明确,采用for循环实现,并在登录成功的时候,使用break结束循环
 */
public class StringTest01 {
    public static void main(String[] args) {
        //已知用户名和密码,定义两个字符串表示即可
        String username = "itheima";
        String password = "czbk";

        //用循环实现多次机会,这里的次数明确,采用for循环实现,并在登录成功的时候,使用break结束循环
        for(int i=0; i<3; i++) {

            //键盘录入要登录的用户名和密码,用 Scanner 实现
            Scanner sc = new Scanner(System.in);

            System.out.println("请输入用户名:");
            String name = sc.nextLine();

            System.out.println("请输入密码:");
            String pwd = sc.nextLine();

            //拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示。字符串的内容比较,用equals() 方法实现
            if (name.equals(username) && pwd.equals(password)) {
                System.out.println("登录成功");
                break;
            } else {
                if(2-i == 0) {
                    System.out.println("你的账户被锁定,请与管理员联系");
                } else {
                    //2,1,0
                    //i,0,1,2
                    System.out.println("登录失败,你还有" + (2 - i) + "次机会");
                }
            }
        }
    }
}

 

(7)遍历字符串案例【应用】

 A.案例需求

        键盘录入一个字符串,使用程序实现在控制台遍历该字符串

 

 B.代码实现

/*
    思路:
        1:键盘录入一个字符串,用 Scanner 实现
        2:遍历字符串,首先要能够获取到字符串中的每一个字符
            public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的
        3:遍历字符串,其次要能够获取到字符串的长度
            public int length():返回此字符串的长度
            数组的长度:数组名.length
            字符串的长度:字符串对象.length()
        4:遍历字符串的通用格式
 */
public class StringTest02 {
    public static void main(String[] args) {
        //键盘录入一个字符串,用 Scanner 实现
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个字符串:");
        String line = sc.nextLine();

        for(int i=0; i<line.length(); i++) {
            System.out.println(line.charAt(i));
        }
    }
}

 

(8)统计字符次数案例【应用】

 A.案例需求

        键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)

 

B.代码实现

/*
  思路:
        1:键盘录入一个字符串,用 Scanner 实现
        2:要统计三种类型的字符个数,需定义三个统计变量,初始值都为0
        3:遍历字符串,得到每一个字符
        4:判断该字符属于哪种类型,然后对应类型的统计变量+1
            假如ch是一个字符,我要判断它属于大写字母,小写字母,还是数字,直接判断该字符是否在对应的范围即可
            大写字母:ch>='A' && ch<='Z'
            小写字母: ch>='a' && ch<='z'
            数字: ch>='0' && ch<='9'
        5:输出三种类型的字符个数
 */
public class StringTest03 {
    public static void main(String[] args) {
        //键盘录入一个字符串,用 Scanner 实现
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个字符串:");
        String line = sc.nextLine();

        //要统计三种类型的字符个数,需定义三个统计变量,初始值都为0
        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 0;

        //遍历字符串,得到每一个字符
        for(int i=0; i<line.length(); i++) {
            char ch = line.charAt(i);

            //判断该字符属于哪种类型,然后对应类型的统计变量+1
            if(ch>='A' && ch<='Z') {
                bigCount++;
            } else if(ch>='a' && ch<='z') {
                smallCount++;
            } else if(ch>='0' && ch<='9') {
                numberCount++;
            }
        }

        //输出三种类型的字符个数
        System.out.println("大写字母:" + bigCount + "个");
        System.out.println("小写字母:" + smallCount + "个");
        System.out.println("数字:" + numberCount + "个");
    }
}

 

(9)字符串拼接案例【应用】

 A.案例需求

        定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。例如,数组为 int[] arr = {1,2,3}; ,执行方法后的输出结果为:[1, 2, 3]

 

B.代码实现

/*
    思路:
        1:定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
        2:定义一个方法,用于把 int 数组中的数据按照指定格式拼接成一个字符串返回。
          返回值类型 String,参数列表 int[] arr
        3:在方法中遍历数组,按照要求进行拼接
        4:调用方法,用一个变量接收结果
        5:输出结果
 */
public class StringTest04 {
    public static void main(String[] args) {
        //定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
        int[] arr = {1, 2, 3};

        //调用方法,用一个变量接收结果
        String s = arrayToString(arr);

        //输出结果
        System.out.println("s:" + s);
    }

    //定义一个方法,用于把 int 数组中的数据按照指定格式拼接成一个字符串返回
    /*
        两个明确:
            返回值类型:String
            参数:int[] arr
     */
    public static String arrayToString(int[] arr) {
        //在方法中遍历数组,按照要求进行拼接
        String s = "";

        s += "[";

        for(int i=0; i<arr.length; i++) {
            if(i==arr.length-1) {
                s += arr[i];
            } else {
                s += arr[i];
                s += ", ";
            }
        }

        s += "]";

        return s;
    }
}

 

(10)字符串反转案例【应用】

A.案例需求

        定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果,例如,键盘录入 abc,输出结果 cba

 

B.代码实现

/*
    思路:
        1:键盘录入一个字符串,用 Scanner 实现
        2:定义一个方法,实现字符串反转。返回值类型 String,参数 String s
        3:在方法中把字符串倒着遍历,然后把每一个得到的字符拼接成一个字符串并返回
        4:调用方法,用一个变量接收结果
        5:输出结果
 */
public class StringTest05 {
    public static void main(String[] args) {
        //键盘录入一个字符串,用 Scanner 实现
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个字符串:");
        String line = sc.nextLine();

        //调用方法,用一个变量接收结果
        String s = reverse(line);

        //输出结果
        System.out.println("s:" + s);
    }

    //定义一个方法,实现字符串反转
    /*
        两个明确:
            返回值类型:String
            参数:String s
     */
    public static String reverse(String s) {
        //在方法中把字符串倒着遍历,然后把每一个得到的字符拼接成一个字符串并返回
        String ss = "";

        for(int i=s.length()-1; i>=0; i--) {
            ss += s.charAt(i);
        }

        return ss;
    }
}

 

(11)帮助文档查看String常用方法【记忆】

方法名说明
public boolean equals(Object anObject)比较字符串的内容,严格区分大小写(用户名和密码)
public char charAt(int index)返回指定索引处的 char 值
public int length()返回此字符串的长度

 

 4.StringBuilder类

(1)StringBuilder类概述【理解】

         StringBuilder类是用来创建可变字符串的类。与String不同,StringBuilder的内容是可以修改的。这就像是一块橡皮泥,你可以随意改变它的形状。为什么要有它呢?因为在频繁修改字符串内容的场景中,使用StringBuilder效率更高,不会像String那样每次修改都创建新的对象。

 

(2)StringBuilder类和String类的区别【理解】

  •  可变性StringBuilder是可变的,可以对其内容进行修改,而String是不可变的。
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World"); // 修改了sb的内容
System.out.println(sb); // 输出:Hello World

          在需要频繁修改字符串内容的场景下,使用StringBuilder可以避免创建大量临时对象,从而提高性能。

  •  性能:由于StringBuilder是可变的,对它的修改不会创建新的对象,所以在频繁修改字符串的场景中,StringBuilder性能更好。
String str = "";
for (int i = 0; i < 100; i++) {
    str += i; // 每次循环都会创建新的字符串对象,效率低
}

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
    sb.append(i); // 修改同一个StringBuilder对象,效率高
}

         上面的例子展示了在循环中频繁修改字符串内容时,使用String会导致大量临时对象的创建,而使用StringBuilder则能高效地进行字符串拼接。

 

(3)StringBuilder类的构造方法【记忆】

  •  常用的构造方法
方法名说明
public StringBuilder()创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象
  •  示例代码
public class StringBuilderDemo01 {
    public static void main(String[] args) {
        //public StringBuilder():创建一个空白可变字符串对象,不含有任何内容
        StringBuilder sb = new StringBuilder();
        System.out.println("sb:" + sb);
        System.out.println("sb.length():" + sb.length());

        //public StringBuilder(String str):根据字符串的内容,来创建可变字符串对象
        StringBuilder sb2 = new StringBuilder("hello");
        System.out.println("sb2:" + sb2);
        System.out.println("sb2.length():" + sb2.length());
    }
}

(4)StringBuilder类添加和反转方法【记忆】

  •  添加和反转方法
方法名说明
public StringBuilder append(任意类型)添加数据,并返回对象本身
public StringBuilder reverse()返回相反的字符序列
  •  示例代码
public class StringBuilderDemo01 {
    public static void main(String[] args) {
        //创建对象
        StringBuilder sb = new StringBuilder();

        //public StringBuilder append(任意类型):添加数据,并返回对象本身
//        StringBuilder sb2 = sb.append("hello");
//
//        System.out.println("sb:" + sb);
//        System.out.println("sb2:" + sb2);
//        System.out.println(sb == sb2);

//        sb.append("hello");
//        sb.append("world");
//        sb.append("java");
//        sb.append(100);

        //链式编程
        sb.append("hello").append("world").append("java").append(100);

        System.out.println("sb:" + sb);

        //public StringBuilder reverse():返回相反的字符序列
        sb.reverse();
        System.out.println("sb:" + sb);
    }
}

 

 (5)StringBuilder和String相互转换【应用】

  • StringBuilder转换为String

    public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String

  • String转换为StringBuilder

    public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder

  • 示例代码

public class StringBuilderDemo02 {
    public static void main(String[] args) {
        /*
        //StringBuilder 转换为 String
        StringBuilder sb = new StringBuilder();
        sb.append("hello");

        //String s = sb; //这个是错误的做法

        //public String toString():通过 toString() 就可以实现把 StringBuilder 转换为 String
        String s = sb.toString();
        System.out.println(s);
        */

        //String 转换为 StringBuilder
        String s = "hello";

        //StringBuilder sb = s; //这个是错误的做法

        //public StringBuilder(String s):通过构造方法就可以实现把 String 转换为 StringBuilder
        StringBuilder sb = new StringBuilder(s);

        System.out.println(sb);
    }
}

 

(6)字符串拼接升级版案例【应用】

 A.案例需求

        定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。例如,数组为int[] arr = {1,2,3}; ,执行方法后的输出结果为:[1, 2, 3]

 

B.代码实现

/*
    思路:
        1:定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
        2:定义一个方法,用于把 int 数组中的数据按照指定格式拼接成一个字符串返回。
          返回值类型 String,参数列表 int[] arr
        3:在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
        4:调用方法,用一个变量接收结果
        5:输出结果
 */
public class StringBuilderTest01 {
    public static void main(String[] args) {
        //定义一个 int 类型的数组,用静态初始化完成数组元素的初始化
        int[] arr = {1, 2, 3};

        //调用方法,用一个变量接收结果
        String s = arrayToString(arr);

        //输出结果
        System.out.println("s:" + s);

    }

    //定义一个方法,用于把 int 数组中的数据按照指定格式拼接成一个字符串返回
    /*
        两个明确:
            返回值类型:String
            参数:int[] arr
     */
    public static String arrayToString(int[] arr) {
        //在方法中用 StringBuilder 按照要求进行拼接,并把结果转成 String 返回
        StringBuilder sb = new StringBuilder();

        sb.append("[");

        for(int i=0; i<arr.length; i++) {
            if(i == arr.length-1) {
                sb.append(arr[i]);
            } else {
                sb.append(arr[i]).append(", ");
            }
        }

        sb.append("]");

        String s = sb.toString();

        return  s;
    }
}

 

(7)字符串反转升级版案例【应用】

 A.案例需求

        定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果,例如,键盘录入abc,输出结果 cba

 

B.代码实现

/*
    思路:
        1:键盘录入一个字符串,用 Scanner 实现
        2:定义一个方法,实现字符串反转。返回值类型 String,参数 String s
        3:在方法中用StringBuilder实现字符串的反转,并把结果转成String返回
        4:调用方法,用一个变量接收结果
        5:输出结果
 */
public class StringBuilderTest02 {
    public static void main(String[] args) {
        //键盘录入一个字符串,用 Scanner 实现
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个字符串:");
        String line = sc.nextLine();

        //调用方法,用一个变量接收结果
        String s = myReverse(line);

        //输出结果
        System.out.println("s:" + s);
    }

    //定义一个方法,实现字符串反转。返回值类型 String,参数 String s
    /*
        两个明确:
            返回值类型:String
            参数:String s
     */
    public static String myReverse(String s) {
        //在方法中用StringBuilder实现字符串的反转,并把结果转成String返回
        //String --- StringBuilder --- reverse() --- String
//        StringBuilder sb = new StringBuilder(s);
//        sb.reverse();
//        String ss = sb.toString();
//        return ss;

       return new StringBuilder(s).reverse().toString();
    }
}

 

(8)帮助文档查看StringBuilder常用方法【记忆】

方法名说明
public StringBuilder append (任意类型)添加数据,并返回对象本身
public StringBuilder reverse()返回相反的字符序列
public int length()返回长度,实际存储值
public String toString()通过toString()就可以实现把StringBuilder转换为String

 

5.总结和下一步

        今天,我们学习了API、String类和StringBuilder类。这些知识点是Java编程的重要基础。掌握它们,你离成为Java高手又近了一步!下一篇文章,我们将深入探讨Java的集合框架并通过实现一个学生管理系统来回顾我们所学的知识。保持好奇心,继续前进吧!🚀😄

        希望你享受今天的学习过程,继续保持这种好奇心和热情。Happy coding! 😄🚀

        如果你能看到这,那博主必须要给你一个大大的鼓励,谢谢你的支持!喜欢的可以点个关注

我们下期再见。

 

 

  • 40
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值