String类


概述

String的特性

  • String类:代表字符串。Java程序中的所有字符串字面值(如“abc”)都作为此类的实例实现
  • String是一个final类,代表不可变的字符序列
  • 字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改
  • String对象的字符内容是存储在一个字符数组value[]中的
package String类的使用;

import org.junit.Test;

/**
 * @BelongsProject: untitled
 * @BelongsPackage: String类的使用
 * @Author: mcc
 * @CreateTime: 2020-10-22 07:57
 * @Description: 不可变性的理解
 */
public class StringTest {

    @Test
    public void test1() {
        //当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值
        String s1 = "abc";//字面量的定义方式
        String s2 = "abc";
        System.out.println(s1 == s2);//比较s1与s2的地址值
        s2 = "hello";
        System.out.println(s1 == s2);
        System.out.println("s1:" + s1);
        System.out.println("s2:" + s2);
        System.out.println("************************");
        //当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
        String s3 = "abc";
        s3 += "def";
        System.out.println("s3:" + s3);
        System.out.println("************************");
        //当调用String的replace方法修改字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
        String s4 = "abc";
        String s5 = s4.replace('a', 'm');
        System.out.println("s4:" + s4);
        System.out.println("s5:" + s5);
        System.out.println(s4 == s5);
    }
}

在这里插入图片描述

1.构造方法

方法功能
String(String original)把字符串数据封装成字符串对象
String(char[] value)把字符数组的数据封装成字符串对象
String(char[] value, int index, int count)把字符数组中的一部分数据封装成字符串对象
//常用的4中封装成(创建)字符串对象方法
public class StringDemo {
    public static void main(String[] args) {
        //方法1:String(String original):把字符串数据封装成字符串对象
        String str1 = new String("hello");
        System.out.println("str1:"+str1);
        System.out.println("----------");
        //方法2:String(char[] value):把字符数组的数据封装成字符串对象
        char[] chs = {'h','e','l','l','o'};
        String str2 = new String(chs);
        System.out.println("str2:"+str2);
        System.out.println("----------");
        //方法3:String(char[] value, int index, int count):把字符数组中的一部分数据封装成字符串对象
        String str3 = new String(chs,1,3);
        System.out.println("str3:"+str3);
        System.out.println("----------");
        //方法4:"abc"是String类的一个实例,或者成为String类的一个对象
        String str4 = "hello";
        System.out.println("str4:"+str4);
    }
}

在这里插入图片描述

2.创建字符串两种方式的区别

public class Test1 {
    public static void main(String[] args) {
        //构造方法创建
        String s1 = new String("hello");

        //直接赋值
        String s2 = "hello";
        String s3 = "hello";

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

内存分配:
在这里插入图片描述

结论:

  • 当通过“=”赋值时,JVM检查字符串常量池中是否存在相同内容的字符串对象的引用,如果存在则将这个引用返回;否则创建新的字符串对象,然后将这个引用存入字符串常量池,并返回该引用
  • 当使用了new来构造字符串对象时,不管字符串常量池中有没有相同内容的对象的引用,新的字符串对象都会创建

3.String类的功能

3.1判断功能

方法功能
boolean equals(Object obj)比较字符串的内容是否相同
boolean equalsIgnoreCase(String str)比较字符串的内容是否相同,忽略大小写
boolean startsWith(String str)判断字符串对象是否以指定的str开头
boolean endsWith(String str)判断字符串对象是否以指定的str结尾
public class Test {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "hello";
        String str3 = "Hello";
        //boolean equals(Object obj)
        //boolean equalsIgnoreCase(String str)
        System.out.println("str1==str2:"+str1.equals(str2));
        System.out.println("str2==str3:"+str2.equals(str3));
        System.out.println("str2==str3:"+str2.equalsIgnoreCase(str3));

        //boolean startsWith(String str)
        System.out.println(str1.startsWith("h"));
        //boolean endsWith(String str)
        System.out.println(str1.endsWith("oo"));
    }
}

在这里插入图片描述

案例:模拟用户登录

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //定义两个字符串对象,用于存储已经存在的用户名和密码
        String username = "admin";
        String password = "admin";
        //给三次机会用for循环实现
        for (int i = 0; i < 3; i++) {
            //键盘录入用户名和密码
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入用户名:");
            String name = sc.nextLine();
            System.out.println("请输入密码:");
            String pwd = sc.nextLine();

            //拿键盘录入的用户名和密码和已经存在的用户名和密码进行比较
            if (name.equals(username) && pwd.equals(password)) {
                System.out.println("登录成功!");
                break;
            } else {
                if (i == 3) {
                    System.out.println("你的用户名和密码已被锁定,请联系管理员!");
                } else {
                    System.out.println("登录失败,你还有" + (2 - i) + "次机会");
                }
            }
        }
    }
}

3.2获取功能

方法功能
int length()获取字符串的长度,其实也就是字符个数
char charAt(int index)获取指定索引处的字符
int indexOf(String str)获取str在字符串对象中第一次出现的索引
String substring(int start)从start开始截取字符串
String substring(int start,int end)从start开始,到end结束截取字符串。包括start,不包括end

案例:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //键盘录入一个字符串数据
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串数据:");
        String str = sc.nextLine();
        //定义三个统计变量,初始化值都是0
        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 0;

        //遍历字符串,得到每一个字符
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            //拿字符进行判断
            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);
    }
}

3.3转换功能

方法功能
char[] toCharArray()把字符串转换为字符数组
String toLowerCase()把字符串转换为小写字符串
String toUpperCase()把字符串转换为大写字符串

案例:键盘录入一个字符串,把该字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)

public class Test {
    public static void main(String[] args) {
        //键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s = sc.nextLine();
        //截取首字符
        String s1 = s.substring(0, 1);
        //截取其余字符
        String s2 = s.substring(1);

        //首字符大写加上其余字符小写
        String s3 = s1.toUpperCase() + s2.toLowerCase();
        //输出
        System.out.println(s3);
    }
}

3.4其他功能

方法功能
String trim()去除字符串两端空格
String[] split(String str)按照指定符号分割字符串

案例1:方法实现把数组中的元素按照指定的格式拼接成一个字符串

public class Test {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {1, 2, 3};
        //写方法实现把数组中的元素按照指定的格式拼接成一个字符串
        String s = Test.arrayToString(arr);
        System.out.println(s);
    }

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

案例2:字符串反转

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s = sc.nextLine();
        //String ss = Test.reserve1(s);
        String ss = Test.reserve2(s);
        System.out.println(ss);
    }

    /**
     * 把字符串转换为字符数组,然后对字符数组进行反转,最后在把字符数组转换为字符串
     *
     * @param s:原字符串
     * @return:返回逆序后的字符串
     */
    private static String reserve2(String s) {
        //将字符串转为字符数组
        char[] chs = s.toCharArray();
        //将数组逆序
        for (int start = 0, end = chs.length - 1; start <= end; start++, end--) {
            char tmp = chs[start];
            chs[start] = chs[end];
            chs[end] = tmp;
        }
        //将数组转为字符串
        String ss = new String(chs);
        return ss;
    }

    /**
     * 方法一:把字符串倒着打印
     *
     * @param s:原字符串
     * @return:返回逆序后的字符串
     */
    private static String reserve1(String s) {
        String ss = "";
        for (int i = s.length() - 1; i >= 0; i--) {
            ss += s.charAt(i);
        }
        return ss;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值