【Java课程心得】Java中的String类---String和StringBuilder


一、String构造方法

1.使用String的构造方法创建对象

java.lang是核心包.不用导包,所以String不用导包

String类作用: String类代表字符串。"“包裹的就是字符串,就是String对象"abc”, “aaa”

2.构造方法

   1.String​() 创建一个空字符串 “”

    2.String​(String original) 创建一个新的String对象,内容和参数一样的

    3.String​(char[] value) 将char数组转成字符串

    4.String​(byte[] bytes) 将byte数组转成字符串

最方便的是字符串直接赋值

        String str5 = “Hello”;

代码示例:

public static void main(String[] args) {
    
    
        // 创建对象的格式: 类名 对象名 = new 类名();
        // 1.String​() 创建一个空字符串 ""
        String s1 = new String();
        System.out.println("s1 = " + s1); // s1 = 空字符串""

        // 2.String​(String original) 创建一个新的String对象,内容和参数一样的
        String s2 = new String("hello");
        System.out.println("s2 = " + s2); // s2 = hello

        // 3.String​(char[] value) 将char数组转成字符串
        char[] chs = new char[] {
    
    'a', 'b', 'c', 'd'};
        String str3 = new String(chs); // "abcd"
        System.out.println("str3 = " + str3); // str3 = abcd

        // 4.String​(byte[] bytes) 将byte数组转成字符串
        byte[] buf = new byte[] {
    
    65, 66, 67, 68, 69};
        String str4 = new String(buf); // 去ASCII码表中找对应的字符 {'A', 'B', 'C', 'D', 'E'}
        System.out.println("str4 = " + str4); // str4 = ABCDE

        // 以上构造方法使用的很少.最方便的是字符串直接赋值
        String str5 = "Hello"; // 0x666
        System.out.println("str5 = " + str5); // str5 = Hello
    }

二、字符串直接赋值和newString

= =:
      基本数据类型,比较数据的值是否相等
      引用数据类型,比较对象的地址

"     "包裹的字符串直接放在字符串常量池中,好处可以重复使用同一个对象.建议使用直接赋值

代码示例:

public class Demo01 {
    
    
    public static void main(String[] args) {
    
    
        System.out.println(3 == 3); // true

        String s1 = "Hello"; // 直接赋值的字符串存在 字符串常量池中
        String s2 = "Hello"; // 直接赋值的字符串存在 字符串常量池中

        String s3 = new String("Hello"); // new的对象在堆中
        String s4 = new String("Hello"); // new的对象在堆中

        System.out.println("s1 == s2: " + (s1 == s2)); // true
        System.out.println("s1 == s3: " + (s1 == s3)); // false
        System.out.println("s3 == s4: " + (s3 == s4)); // false
    }
}

三、 String的equals方法

1.equals 和 ==

== 比较对象的地址
equals方法可以比较字符串的内容

boolean equals​(Object anObject) 比较字符串的内容是否相同

代码示例:

public class Demo021 {
    
    
    public static void main(String[] args) {
    
    
        String s1 = "Hello";
        String s2 = new String("Hello");
        System.out.println(s1 == s2); // false

        // equals:比较字符串内容 (网站登录比较用户和密码)
        System.out.println(s1.equals(s2)); // true
    }
}

2.equals 和 equalsIgnoreCase​

equals:比较内容需要一模一样.大小写都要一样(区分大小写)
equalsIgnoreCase​: 忽略大小写,大写和小写是一样的 (对比验证码)


3.equals方法的运用例子

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

分析:

   1.已知用户名和密码使用变量保存起来
   2.使用Scanner让用户输入账号密码
   3.如果正确,提示登录成功,如果不正确提示登录失败
   4.使用for循环输入三次,如果正确就跳出循环

代码:

 public static void main(String[] args) {
    
    
        // 1.已知用户名和密码使用变量保存起来
        String userName = "abc";
        String password = "123";

        // 4.使用for循环输入三次,如果正确就跳出循环
        for (int i = 0; i < 3; i++) {
    
    
            // i = 0; 剩余2次
            // i = 1; 剩余1次
            // i = 2; 剩余0次
            // 2.使用Scanner让用户输入账号密码
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入账号:");
            String inputUserName = sc.next();
            System.out.println("请输入密码:");
            String inputPassword = sc.next();

            // 3.如果正确,提示登录成功,如果不正确提示登录失败
            if (userName.equals(inputUserName) && password.equals(inputPassword)) {
    
    
                System.out.println("登录成功");
                break;
            } else {
    
    
                System.out.println("登录失败,请重新输入, 剩余次数: " + (2 - i));
            }
        }
    }

四、String的遍历案例

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

效果:
    用户输入:abcd
    控制台一次打印每个字符:
       a
       b
       c
       d

分析:
核心从字符串中得到每个字符

char charAt​(int index) 返回指定索引处的 char值
int length​() 返回此字符串的长度。

代码:

 public static void main(String[] args) {
    
    
        //               0123
        // String str = "abcd";
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String str = sc.next(); // abcd

        // 遍历字符串获取每个字符
        for (int i = 0; i < str.length(); i++) {
    
     // i = 0, 1, 2, 3
            System.out.println(str.charAt(i));
        }

        // char charAt​(int index) 返回指定索引处的 char值
        // System.out.println(str.charAt(0)); // a
        // System.out.println(str.charAt(1)); // b
        // System.out.println(str.charAt(2)); // c
        // System.out.println(str.charAt(3)); // d

        // int length​() 返回此字符串的长度。
        // System.out.println(str.length()); // 4
    }

2.统计字符次数案例:

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

效果:
       用户输入: RF2fd%#3SF&w2
      控制台打印:
            大写字母: 4
            小写字母: 3
            数字字符: 3

分析:
     1.键盘录入一个字符串
     2.定义3个计数器
     3.遍历字符串得到每个字符
     4.如果是大写字母,大写数量+1
     5.如果是小写字母,小写数量+1
     6.如果是数字字符,数字字符数量+1

代码:

public static void main(String[] args) {
    
    
        // 1.键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String str = sc.next(); // RF2fd%#3SF&w2
        //                           ↑
        // 2.定义3个计数器
        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 0;

        // 3.遍历字符串得到每个字符
        for (int i = 0; i < str.length(); i++) {
    
    
            char c = str.charAt(i);

            // 4.如果是大写字母,大写数量+1
            if (c >= 'A' && c <= 'Z') {
    
    
                bigCount++;
            } else if (c >= 'a' && c <= 'z') {
    
    
                // 5.如果是小写字母,小写数量+1
                smallCount++;
            } else if (c >= '0' && c <= '9') {
    
    
                // 6.如果是数字字符,数字字符数量+1
                numberCount++;
            }
        }

        System.out.println("大写字母数量: " + bigCount);
        System.out.println("小写字母数量: " + smallCount);
        System.out.println("数字字符数量: " + numberCount);
    }

3.遍历字符串案例

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

分析:
   拼接字符串 +就可以拼接字符串
       1.定义一个数组
       2.定义一个方法arrayToString
          返回值类型: String字符串
          参数列表: int[]数组
       3.在方法内部
            1.定义字符串"["
            2.遍历数组
            3.如果不是最后一个元素,拼接 "元素, "
            4.如果是最后一个元素,拼接 "元素] "
            5.返回拼接好的字符串

代码:

 public static void main(String[] args) {
    
    
        // 1.定义一个数组
        int[] arr = {
    
    1, 2, 3};

        String str = arrayToString(arr);
        System.out.println("str = " + str);
    }

    //                              0  1  2
    // 2.定义一个方法arrayToString [1, 2, 3]
    public static String arrayToString(int[] array) {
    
     // {1, 2, 3};
        // 2.1.定义字符串"["
        String str = "[";
        // 2.2.遍历数组
        for (int i = 0; i < array.length; i++) {
    
    
            if (i == array.length - 1) {
    
    
                // 2.4.如果是最后一个元素,拼接 "元素] "
                str += array[i] + "]";
            } else {
    
    
                // 2.3.如果不是最后一个元素,拼接 "元素, "
                str += array[i] + ", ";
            }
        }

        // 2.5.返回拼接好的字符串
        return str;
    }

4.字符串反转案例

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

效果:
       用户输入:abcd
       控制台打印:
       dcba

字符串的内容是不可变的

分析: 字符串内容是不可变的.需要搞一个新字符串 反过来遍历字符串,在重新拼接
    1.让用户输入字符串
    2.定义方法实现字符串反转reverse
            返回值类型: 翻转后的字符串: String
            参数列表: 用户输入的字符串: String str
    3.在方法中反过来遍历字符串,拼接新字符串

小结:
         字符串翻转案例,核心也是遍历字符串,反过来遍历字符串
将得到的每个字母拼接成新字符串

注意:长度问题
     数组长度属性: 数组名.length
     字符串长度方法: 字符串.length()

代码:

public static void main(String[] args) {
    
    
        // 1.让用户输入字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String str2 = sc.next();

        String reverseStr = reverse(str2);
        System.out.println("翻转后的字符串 = " + reverseStr);
    }

    // 2.定义方法实现字符串反转reverse
    public static String reverse(String str) {
    
    
        String reverseStr = "";

        // 3.在方法中反过来遍历字符串,拼接新字符串
        //↓
        // 0123
        // abcd
        for (int i = str.length() - 1; i >= 0 ; i--) {
    
    
            char c = str.charAt(i);
            reverseStr += c;
        }

        return reverseStr;
    }

五.StringBuilder类

1.StringBuilder类的概述

字符串里面的内容不能改变
StringBuilder他里面的内容是可以改变

StringBuilder:一个可变的字符序列

2.StringBuilder类的构造方法

  1. StringBuilder​() 构造一个没有字符的字符串构建器,初始容量为16个字符

  2. StringBuilder​(String str) 构造一个初始化为指定字符串内容的字符串构建器

3. StringBuilder类添加和反转方法

    StringBuilder append​(xxx x) 将指定类型添加到StringBuilder的末尾
    StringBuilder reverse​() 翻转StringBuilder中的内容

4.小结:

StringBuilder类的构造方法
    1.StringBuilder​() 创建空的StringBuilder.里面没有内容
    2.StringBuilder​(String str) 构造一个初始化为指定字符串内容的字符串构建器

StringBuilder类添加和反转方法
    StringBuilder append​(xxx x) 将指定类型添加到StringBuilder的末尾
    StringBuilder reverse​() 翻转StringBuilder中的内容


5.代码示例

public static void main(String[] args) {
    
    
        // StringBuilder相当于一个容器.可以放各种数据
        // StringBuilder类的构造方法
        // 1.StringBuilder​() 构造一个没有字符的字符串构建器,初始容量为16个字符
        StringBuilder sb1 = new StringBuilder(); // 创建空的StringBuilder.里面没有内容
        System.out.println("sb1 = " + sb1); // sb1 =

        // 2.StringBuilder​(String str) 构造一个初始化为指定字符串内容的字符串构建器
        StringBuilder sb2 = new StringBuilder("hello"); // 创建一个有内容的StringBuilder
        System.out.println("sb2 = " + sb2); // sb2 = hello

        // 可以往StringBuilder中添加内容
        // StringBuilder append​(xxx x) 将指定类型添加到StringBuilder的末尾
        sb1.append(true);
        sb1.append(6.66);
        sb1.append("大家好!");
        sb1.append(111);
        // StringBuilder特殊情况
        StringBuilder sb3 = sb1.append("aa");
        System.out.println(sb1 == sb3); // ==比较对象的地址 true
        // append返回值就是调用者,他们是一样的
        // 扩展:StringBuilder的特殊调用形式(链式调用)
        sb1.append(11).append(true).append(3.33);

        System.out.println("sb1 = " + sb1); // true6.66大家好!111
        System.out.println("sb3 = " + sb3); // true6.66大家好!111

        // StringBuilder reverse​() 翻转StringBuilder中的内容
        StringBuilder sb4 = new StringBuilder("abcd");
        System.out.println(sb4.reverse()); // dcba
    }

六.StringBuilder和String相互转换

String里面的内容不能变化
StringBuilder里面的内容可以变化,相当于加强版的String

所以有时候我们需要StringBuilder和String间的相互转换

1.String转换为StringBuilder

通过构造方法:
     StringBuilder​(String str)

2.StringBuilder转换为String

String toString​() 将StringBuilder中的内容转成字符串返回

3.代码示例

 public static void main(String[] args) {
    
    
        // 1.String转换为StringBuilder
        // StringBuilder​(String str) 构造一个初始化为指定字符串内容的字符串构建器
        String str = "hello";
        StringBuilder sb = new StringBuilder(str);

        // 2.StringBuilder转换为String
        // StringBuilder类的方法 String toString​() 返回表示此顺序中的数据的字符串。
        String str2 = sb.toString();
        System.out.println("str2 = " + str2);
    }

七. StringBuilder案例

1.字符串拼接升级版案例

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

小结:
        StringBuilder的append拼接字符串效率比String+拼接效率高一点

代码:

 public static void main(String[] args) {
    
    
        int[] arr = {
    
    1, 2, 3};

        String str = arrayToString(arr);
        System.out.println("str = " + str);
    }

    public static String arrayToString(int[] array) {
    
    
        // 遍历数组,得到每个元素,拼接成字符串返回: [1, 2, 3]
        StringBuilder sb = new StringBuilder("[");

        for (int i = 0; i < array.length; i++) {
    
    
            if (i == array.length - 1) {
    
    
                // 是最后一个元素
                sb.append(array[i]).append("]");
            } else {
    
    
                // 不是最后一个元素
                sb.append(array[i]).append(", ");
            }
        }

        // 将StringBuilder中的内容转成字符串
        return sb.toString();
    }

2.字符串反转升级版案例

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

效果:
       用户输入:abc
       控制台打印:
       cba

分析:以后看到字符串要翻转就想到StringBuilder类
   1.用户输入一个字符串
   2.将字符串转换成StringBuilder
   3.使用StringBuilder的reverse翻转功能
   4.将StringBuilder转成String

总结

String表示字符串,里面的内容不能改变
   equals(): 比较字符串的内容是否相同
   charAt(): 根据索引获取字符串中指定位置的字符 “abc”
   length(): 获取字符串的长度

操作:字符串的遍历
   for (int i = 0; i < str.length(); i++) {
      // 取出每个字符
      char c = str.charAt(i);
    }

StringBuilder表示可变的字符串,里面的内容可以改变
   构造方法:
      StringBuilder() 创建一个StringBuilder里面没有内容
      StringBuilder(String str) 创建一个StringBuilder里面的内容就是参数传入的内容

   普通方法:
      append(Xxx x) 添加数据到StringBuilder中
      reverse() 翻转StringBuilder中的内容
      toString() 将StringBuilder中的内容转成String

猜你喜欢

转载自blog.csdn.net/maikotom/article/details/113781055