首页 > 编程笔记 > Java笔记 阅读:4

Java String字符串类的定义和使用(附带实例)

在 Java 编程语言中,字符串(String)是一种常见的数据类型,主要用于存储文本信息。

与字符串相似的概念叫字节(byte)。字节是存储容量的基本单位,一个字节等于 8 个二进制单位。字符是数字、字母、汉字等符号,一个字符由一个或多个字节组成,字符串由一个或多个字符组成。无论是处理用户的输入输出,还是与外部通信,字符串都具有重要作用。

Java创建字符串

字符串必须在一对引号(双引号)之内。语法结构如下:
String 字符串名称="xxx";
用这种方式创建的字符串会被放入字符串常量池中。如果在程序的其他地方再次使用相同的字面值创建字符串,Java 就会直接返回常量池中已有的字符串对象,避免重复创建,以节省内存空间。

字符串 java.lang.String 被 final 修饰,所以 String 是不可变的。JVM 使用字符串常量池来保存所有的字符串对象。

多行文本声明通常使用“\n”进行字符串拼接。Java 在 JDK13 和 JDK 14 中提供了文本块预览功能,该功能成为 JDK15 以上版本的标准功能。文本块支持更友好的多行文本声明,使用三个引号定义文本块。
String str = """
xxxxxxxxxxxxxx。
xxxxxxxxxxxxxx。
""";

字符串类型并不属于 Java 基本数据类型,它是一个对象,由 java.lang.String 类表示。因此,可以像创建一个对象那样创建字符串。语法结构如下:
String 对象名称 = new String("xxxx");
通过调用 String 类的构造方法来创建一个新的 String 对象。构造方法传入一个字符串字面值,这个新创建的对象在堆内存中分配空间,并将传入的字符串内容复制到这个新的空间中。

Java字符串通用操作

对一篇文章来说,我们可能想获取文章总字数,进行段落拼接、短句截取、文章比较等操作。对字符串类型来说,这些操作非常简单。

1) 获取字符串的长度

我们可以通过调用 length(),获取字符串的长度。例如:
public class StringDemo {
    public static void main(String[] args) {
        // 定义一个字符串
        String string = "helloworldhelloworld";
        // 获取字符串的长度
        int length = string.length();
        System.out.println(length);
    }
}
程序运行结果为:

20

在上述代码中,通过调用 string.length() 方法获取字符串 string 的长度,并将其存储在变量 length 中。length() 方法返回一个整数,表示字符串中字符的个数。

2) 字符串连接

通过字符串连接符“+”或调用 concat(),可以将多个字符串拼接成一个字符串:

例如,一个字符串为 hello,另一个字符串为 world,使用“+”将字符串连接到一起,代码如下:
public class StringDemo {
    public static void main(String[] args) {
        // 定义字符串hello
        String str = "hello";
        // 定义字符串world
        String str2 = "world";
        // 将字符串连接到一起
        System.out.println(str + str2);
    }
}
程序运行结果为:

helloworld

在上述代码中,使用“+”将多个字符串拼接在一起,Java 会在编译时自动创建一个 StringBuilder 对象,并调用 append() 方法来执行拼接操作,最后调用 toString() 方法将结果转换为字符串。

【实例】一个字符串为 hello,另一个字符串为 world,调用 concat() 方法将字符串连接到一起,代码如下:
public class StringDemo {
    public static void main(String[] args) {
        // 定义字符串hello
        String str = "hello";
        // 定义字符串world
        String str2 = "world";
        // 将字符串连接到一起
        String concat = str.concat(str2);
        System.out.println(concat);
    }
}
程序运行结果为:

helloworld

在上述代码中,调用 concat() 方法和“+”获取的结果是一致的,“+”给多个字符串连接提供了便利,但不适用于大规模的生产环境。

3) 字符串截取

通过调用 substring() 可以截取子字符串。substring() 被重载两次:
【实例】针对字符串 helloworldhelloworld,截取长度为 5 到最后的字符串和长度为 5 到 10 的字符串,代码如下:
public class StringDemo {
    public static void main(String[] args) {
        // 定义一个字符串
        String string = "helloworldhelloworld";
        // 字符串截取:从索引5开始,截取到字符串最后
        String substring = string.substring(5);
        System.out.println(substring);
        // 字符串截取:从索引5开始,截取到索引10(不包含10)
        String substring1 = string.substring(5, 10);
        System.out.println(substring1);
    }
}
程序运行结果为:

worldhelloworld
world

在上述代码中,其中一个字符串从 5 开始截取,直到 10(但不包括 10 处的字符)。如果 substring 方法只有一个参数,就从 beginIndex 开始截取,直到截取到字符串末尾。

需要注意以下几点:

4) 字符串比较

equals() 方法用来比较两个字符串的内容是否相同。

【实例】一个字符串是 helloworld,另一个字符串是 hello,比较两个字符串的内容是否相同,代码如下:
public class StringDemo {
    public static void main(String[] args) {
        // 定义字符串:helloworld
        String str = "helloworld";
        // 定义字符串:hello
        String str02 = "hello";
        boolean equals = str.equals(str02);
        System.out.println(equals);
    }
}
程序运行结果为:

false

在上述代码中,str 名称调用 equals() 方法与 str02 字符串进行比较,获取的结果为 false,两个字符串的结果是不一致的。如果两个字符串的内容一致,获取的结果就应该是 true。

在比较字符串是否相等时,应该谨慎使用 equals() 方法,必须确保方法调用者不为 null,否则程序会报空指针异常(java.lang.NullPointerException)。因为 equals() 方法是 Object 类的方法,任何对象都可以调用 equals() 方法,但 null 是一个特殊的值,而非对象。

不要使用操作符 == 比较字符串。一般来说,字符串主要比较的是内容是否相等,而==比较的是对象在内存中的内存值是否相等。

Java String API

java.lang.String 类提供了很多操作字符串的方法,对每个方法的详细描述,请查看 Java 8 API。

下表列举了 String 类部分 API:

表:String 类部分 API
方法 作用
boolean contains(CharSequence s) 检查字符串中是否包含该字符串,或是否以该字符串开始或结束
boolean startsWith(String prefix)
boolean endsWith(String suffix)
int indexOf(String str) 获取该字符串第一次或最后一次出现的位置
int lastIndexOf(String str)
String replace(CharSequence target, CharSequence replacement) 返回一个字符串被替换后的字符串
String toUpperCase() 将字符串转为大写或小写
String toLowerCase()

相关文章