Java String字符串类的定义和使用(附带实例)
在 Java 编程语言中,字符串(String)是一种常见的数据类型,主要用于存储文本信息。
与字符串相似的概念叫字节(byte)。字节是存储容量的基本单位,一个字节等于 8 个二进制单位。字符是数字、字母、汉字等符号,一个字符由一个或多个字节组成,字符串由一个或多个字符组成。无论是处理用户的输入输出,还是与外部通信,字符串都具有重要作用。
字符串类型并不属于 Java 基本数据类型,它是一个对象,由 java.lang.String 类表示。因此,可以像创建一个对象那样创建字符串。语法结构如下:
例如,一个字符串为 hello,另一个字符串为 world,使用“+”将字符串连接到一起,代码如下:
【实例】一个字符串为 hello,另一个字符串为 world,调用 concat() 方法将字符串连接到一起,代码如下:
【实例】针对字符串 helloworldhelloworld,截取长度为 5 到最后的字符串和长度为 5 到 10 的字符串,代码如下:
需要注意以下几点:
【实例】一个字符串是 helloworld,另一个字符串是 hello,比较两个字符串的内容是否相同,代码如下:
在比较字符串是否相等时,应该谨慎使用 equals() 方法,必须确保方法调用者不为 null,否则程序会报空指针异常(java.lang.NullPointerException)。因为 equals() 方法是 Object 类的方法,任何对象都可以调用 equals() 方法,但 null 是一个特殊的值,而非对象。
不要使用操作符 == 比较字符串。一般来说,字符串主要比较的是内容是否相等,而==比较的是对象在内存中的内存值是否相等。
下表列举了 String 类部分 API:
与字符串相似的概念叫字节(byte)。字节是存储容量的基本单位,一个字节等于 8 个二进制单位。字符是数字、字母、汉字等符号,一个字符由一个或多个字节组成,字符串由一个或多个字符组成。无论是处理用户的输入输出,还是与外部通信,字符串都具有重要作用。
Java创建字符串
字符串必须在一对引号(双引号)之内。语法结构如下:String 字符串名称="xxx";用这种方式创建的字符串会被放入字符串常量池中。如果在程序的其他地方再次使用相同的字面值创建字符串,Java 就会直接返回常量池中已有的字符串对象,避免重复创建,以节省内存空间。
多行文本声明通常使用“\n”进行字符串拼接。Java 在 JDK13 和 JDK 14 中提供了文本块预览功能,该功能成为 JDK15 以上版本的标准功能。文本块支持更友好的多行文本声明,使用三个引号定义文本块。字符串 java.lang.String 被 final 修饰,所以 String 是不可变的。JVM 使用字符串常量池来保存所有的字符串对象。
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() 被重载两次:- substring(int beginIndex):表示从 beginIndex 位置开始,截取到字符串最后一位,字符串位置都是从 0 开始的;
- substring(int beginInde, int endIndex):表示从 beginIndex 位置开始,截取到 endIndex,但不包含 endIndex 位置的子字符串。
【实例】针对字符串 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
需要注意以下几点:
- 索引值从 0 开始,如果指定的索引超出了字符串的范围,会抛出 StringIndexOutOf BoundsException 异常。
- 在使用 substring(int beginIndex,int endIndex) 方法时,确保 beginIndex 小于或等于 endIndex,否则也会抛出异常。
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:
方法 | 作用 |
---|---|
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() |