92. Java 数字和字符串 - 字符串
在 Java 编程中,字符串是最常用的数据类型之一。字符串表示为一系列字符,是不可变的对象,由 String 类来表示和操作。
一、创建字符串
1.1 使用字符串文字
最直接的创建方式是使用双引号括起的字符串文字。当编译器遇到字符串文字时,会自动创建一个 String 对象。例如:
java
String greeting = "Hello world!";
在这行代码中,"Hello world!" 就是一个字符串文本,编译器会为它创建一个不可变的 String 对象。
1.2 使用构造函数
我们也可以使用 new 关键字结合 String 构造函数来创建字符串。String 类提供了多达 13 个构造函数,可以通过不同的源来初始化字符串。例如,使用字符数组来构造字符串:
java
char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };
String helloString = new String(helloArray);
System.out.println(helloString); // 输出: hello.
注意:由于 String 是不可变的,一旦创建后就无法修改。如果看似"修改"字符串的方法实际上都是返回了一个新字符串。
二、字符串的长度与字符访问
2.1 获取字符串长度
String 类提供了 length() 方法,用于获取字符串中字符的个数。例如:
java
String palindrome = "Dot saw I was Tod";
int len = palindrome.length(); // len 为 17
2.2 访问字符串中的字符
使用 charAt(int index) 方法,可以获取字符串中指定位置的字符。注意,字符下标从 0 开始。例如:
java
char firstChar = palindrome.charAt(0); // 'D'
2.3 将字符串转换为字符数组
如果需要对字符串进行逐字符处理(例如反转字符串),可以先将字符串转换为字符数组。有两种常用方法:
方式一:手动循环
java
int len = palindrome.length();
char[] tempCharArray = new char[len];
for (int i = 0; i < len; i++) {
tempCharArray[i] = palindrome.charAt(i);
}
方式二:使用 getChars() 方法
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 方法可以将字符串(或其一部分)复制到目标字符数组中。例如:
java
char[] tempCharArray = new char[len];
palindrome.getChars(0, len, tempCharArray, 0);
2.4 反转字符串示例
下面是一个完整示例,展示如何将字符串反转:
java
public class StringDemo {
public static void main(String[] args) {
String palindrome = "Dot saw I was Tod";
int len = palindrome.length();
char[] tempCharArray = new char[len];
char[] reversedArray = new char[len];
// 使用 getChars() 方法将字符串复制到字符数组中
palindrome.getChars(0, len, tempCharArray, 0);
// 反转字符数组
for (int j = 0; j < len; j++) {
reversedArray[j] = tempCharArray[len - 1 - j];
}
// 创建新的字符串
String reversePalindrome = new String(reversedArray);
System.out.println("反转后的字符串为: " + reversePalindrome);
}
}
运行该程序将输出:
java
doT saw I was toD
三、字符串连接
3.1 使用 concat() 方法
String 类提供了 concat(String str) 方法,用于连接两个字符串,并返回新字符串:
java
String result = "My name is ".concat("Rumplestiltskin");
System.out.println(result); // 输出: My name is Rumplestiltskin
3.2 使用 + 运算符
更常见的是使用 + 运算符进行字符串连接,这种方式在 print 语句中非常直观:
java
String string1 = "saw I was ";
System.out.println("Dot " + string1 + "Tod");
// 输出: Dot saw I was Tod
在连接过程中,如果某个操作数不是 String 类型,Java 会自动调用其 toString() 方法将其转换为字符串。
四、多行字符串
在 Java SE 15 之前,文本字符串不能跨越多行书写,必须使用 + 运算符将每行连接起来;但从 Java SE 15 开始,引入了【文本块】(text blocks),允许直接书写多行字符串:
java
String html = """
<html>
<body>
<p>Hello, world</p>
</body>
</html>
""";
System.out.println(html);
这种方式不仅简洁,而且提高了多行字符串的可读性,特别适用于 HTML、SQL 或 JSON 等格式。
五、格式化字符串
除了直接拼接字符串外,Java 还提供了格式化字符串的方法,例如 String.format()。这与 System.out.printf() 类似,只不过返回一个字符串对象而不是直接输出到控制台。例如:
java
String fs = String.format("The value of the float variable is %f, while the value of the integer variable is %d, and the string is %s",
3.14159, 42, "Java");
System.out.println(fs);
输出结果:
java
The value of the float variable is 3.141590, while the value of the integer variable is 42, and the string is Java
总结
- 字符串创建 :可以使用字符串文字或构造函数创建
String对象;字符串一经创建不可更改。 - 字符串操作 :通过
length()、charAt()、getChars()等方法可以获取字符串信息和操作字符。 - 字符串连接 :可以使用
concat()方法或 + 运算符进行连接;非String对象会自动转换为字符串。 - 多行字符串 :从
Java SE 15开始支持文本块,简化多行字符串的书写。 - 格式化字符串 :利用
String.format()方法可以生成格式化的字符串,方便重复使用和国际化支持。
通过以上内容和示例,希望大家能够深入理解和灵活运用 Java 中的字符串操作,从而编写出高效且易于维护的代码。