5.1 java中的String类

本文深入讲解 Java 中 String 类的特性及使用方法,包括字符串创建、不可变性、常见操作方法等,并通过实例演示如何判断回文字符串和校验电子邮件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java中的字符串String类

String 类表示字符串,Java 程序中的所有字符串(例如“蓝桥”)都作为此类的对象。String 类不是基本数据类型,它是一个类。因为对象的初始化默认值是 null,所以 String 类对象的初始化默认值也是 null。String 是一种特殊的对象:

String 字符串是常量,字符串的值在创建之后不能更改
String 类是 final 修饰的最终类,因此不能被继承

String类常见的几种创建方法

如何使用 String 类操作字符串呢?首先要定义并初始化字符串。在初始化时,可以直接使用双引号来创建一个字符串字面值常量,这也是实际编程中最常用的方法,如 String h=“hello”;,还可以借助于 String 类包含的以下构造方法(构造方法的方法名和类名一致,会在后续章节进行介绍)。

String(String s):创建一个新的 String 对象,使其内容为参数 s 中的字符序列。
String(char[] value):创建一个新的 String 对象,使其内容为参数 value 中的字符序列。
String(char[] value, int offset, int count):创建一个新的 String 对象,其内容为取自字符数组参数 value 的一个子序列。offset 参数是子数组第一个字符的索引(从 0 开始建立索引),count 参数指定子数组的长度。

示例如下:

String stuName1 = new String("王云");
char[] charArray = {'刘','静','涛'};
String stuName2 = new String(charArray);
String stuName3 = new String(charArray,1,2);//从'静'字开始,截取 2 个字符,结果是“静涛”

最常用的方式:

在这里插入图片描述

字符串的不可变性(重,字符串不可变和变量可变)

在实际编程过程中,常常有这样的需求,需要在一个字符串后面增加一些内容,例如需要在 stuName1 后面增加字符串“同学”。查询相关资料,知道 String 类提供了一个 concat(String str)的方法,可以在 String 类字符串后面增加字符串。

我们来看看下面这个例子

public class TestString1 {
    public static void main(String[] args) {
        String stuName1 = new String("王云");
        stuName1.concat("同学");
        System.out.println(stuName1);
    }
}

如果编译、运行此程序,执行的输出结果是“王云”,而不是“王云同学”。为什么呢?

我们知道 String 字符串是常量,字符串的值在创建之后不能更改concat(String str)方法实际创建了一个新 String 字符串,用来存放 stuName1 字符串加上“同学”的结果,而不是在原来 stuName1 字符串的后面增加内容,对于 stuName1 而言,它是常量,内容并没有变化,如图所示。

图片描述

如果想输出“王云同学”,可以将 stuName1.concat(“同学”) 表达式的结果赋给一个新的字符串,然后再输出该字符串。

例如:字母大小写转换时
在这里插入图片描述

s1指向的地址不变,只是在堆空间新建了一个值是ABC的小写,所以我们需要新建字符串给它赋值就可以了

在这里插入图片描述

也可以转化为小写后重新赋值给s1,此处是s1的指针变了所以成功转换,原本的ABC是仍然存在的。

在这里插入图片描述
在这里插入图片描述

字符串的不可变性例题

在这里插入图片描述

如何判断字符串相等

比较字符串常用的两个方法是运算符 == 和 String 类的 equals 方法

使用**“==”比较两个字符串,是比较两个对象在内存中的地址是否一致,本质上就是判断两个变量是否指向同一个对象**,如果是则返回 true,否则返回 false。而 String 类的 equals 方法则是比较两个 String 字符串的内容是否一致,返回值也是一个布尔类型。

在比较字符串时还要知道**“常量池”的概念**:在第一次生成某个字符串时,这个字符串就会被复制到 JVM 的一个特定的内存中,这个内存区域就称为“常量池”。以后,如果再次创建了相同内容的字符串,JVM 就直接返回常量池中已有的字符串

字符串的比较,例:

在这里插入图片描述

常量池,例:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

字符串中常用的方法1

以下是 String 类索引,比较和替换相关的常用方法。

 1. public char charAt(int index)

返回 index 指定的索引处的字符。

 2. public int length()

返回此字符串的长度。这里需要和获取数组长度区别开,获取数组长度是通过数组名.length获取的。

 3.public int indexOf(String str)

返回指定子字符串 str 在此字符串中第一次出现处的索引。没有则返回-1。

 4.public int indexOf(String str,int fromIndex)

返回指定子字符串 str 在此字符串中第一次出现处的索引,从指定的索引 fromIndex 处开始搜索。没有则返回-1。

 5.public boolean equalsIgnoreCase(String another)

将此 String 与另一个字符串 another 比较,比较时不区分大小写。

 6.public String replace(char oldChar,char newChar)

返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。这里再重申一下,String 类方法中的索引都是从 0 开始编号的。

在这里插入图片描述

字符串中常用的方法2

 7.public boolean startsWith(String prefix)

判断此字符串是否以 prefix 指定的前缀开始。

 8.public boolean endsWith(String suffix)

判断此字符串是否以 suffix 指定的后缀结束。

 9.public String toUpperCase()

将此 String 中的所有字符都转换为大写。

 10.public String toLowerCase()

将此 String 中的所有字符都转换为小写。

 11.public String substring(int beginIndex)

返回一个从 beginIndex 开始到结尾的新的子字符串。

 12.public String substring(int beginIndex,int endIndex)

返回一个从 beginIndex 开始到 endIndex 结尾(不含 endIndex 所指字符)的新的子字符串。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

字符串中常用的方法3

 13.public String trim()

返回字符串的副本,忽略原字符串前后的空格

 14.public static String valueOf(基本数据类型参数)

返回基本数据类型参数的字符串表示形式,例如:

public static String valueOf(int i)
public static String valueOf(double d)

这两个方法是 String 类的静态方法,关于“静态”的内容将会在后面的课程详细介绍,这里需要大家注意的是,静态方法是通过类名.方法名直接调用的,例如:

String result = String.valueOf(100);//将int型100转换为字符串"100"

在这里插入图片描述

 15.public String[] split(String regex)

通过 regex 指定的分隔符分隔字符串,返回分隔后的字符串数组。注意是通过正则方式进行分割!!

例如:
在这里插入图片描述
当遇到(这种在正则中有特殊含义的符号时就需要使用反斜杠\进行一个转义告诉他(只是一个符号,但是由于\本身也有特殊含义,就导致需要再添加一个\进行转义,例如:
在这里插入图片描述
在这里插入图片描述

例题

在这里插入图片描述
在这里插入图片描述

【练一练】实现回文字符串判断器

首先在 /home/project 中创建一个 Palindrome.java 。

图片描述

本次实验的目标是完成一个回文字符串判断器,即传入一个字符串判断该字符串是否为回文结构。

回文结构:正序和倒序都一模一样的字符串结构。

本次实验的思路:将传入的字符串倒序排列得到新字符串,再将新字符串与原字符串进行比较。若比较结果为真则表示该字符串为回文字符串,反之则不是回文字符串。

代码如下:

import java.util.Scanner;

public class Palindrome {
    public static void main(String[] args) {
        // 创建一个控制台录入对象
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        // 从控制台接收整行字符串
        String str = sc.nextLine();
        // 创建一个新字符串,该字符串内容为空
        String nstr = "";
        // 将该字符串倒序遍历并拼接到新的字符串中
        for (int i = str.length()-1; i >= 0 ; i--) {
            nstr+=str.charAt(i);
        }
        // 将新字符串与原字符串进行比较
        if(str.equals(nstr)){
            System.out.println(str+":是回文");
        }else{
            System.out.println(str+":不是回文");
        }
    }
}

接下来在控制台使用命令编译并运行该程序。

最后得出实验结果。

图片描述

正则表达式匹配规则

在这里插入图片描述
在这里插入图片描述

【练一练】邮箱校验【正则表达式需补充】(重)

首先在 /home/project 中创建一个 Email.java 。

本次实验的思路:根据我们常用邮箱的格式编写一段表示邮箱的正则表达式,将传入的邮箱字符串用该正则表达式验证,如验证通过则表示邮箱合法,反之则不合法。

合法 E-mail 地址:

必须包含一个并且只有一个符号“@”
第一个字符不得是“@”或者“.”
不允许出现“@.”或者.@
结尾不得是字符“@”或者“.”
允许“@”前的字符中出现“+”
不允许“+”在最前面,或者“+@”
代码如下:

import java.util.Scanner;

/**
 * @author life
 * @create 2019-11-24 14:29
 * 判断功能:
 * 校验邮箱
 */
public class Email {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 提示语句
        System.out.println("请输入您的邮箱:");
        // 接收控制台录入的邮箱
        String email = scanner.next();
        // 传入方法进行校验
        boolean result = checkEmail(email);
        // 判断校验结果
        if(result){
            System.out.println("邮箱正确");
        }else{
            System.out.println("邮箱错误");
        }

    }

    public static boolean checkEmail(String email){
        // 设计正则
        String regex =  "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
        // 使用 String 对象中的 matches() 方法校验字符串是否符合正则要求
        if (email.matches(regex) == true) {
            return true;
        } else
            return false;
    }
}

接下来在控制台使用命令编译并运行该程序。

最后得出实验结果。

图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值