Java 字符串
在 Java 中,字符串是一个字符序列。在本教程中,我们通过示例介绍 Java 字符串、如何创建字符串以及字符串的各种方法。
在本教程中,我们通过示例介绍 Java 字符串、如何创建字符串以及字符串的各种方法。
在 Java 中,字符串是一个字符序列。例如, "Hello"
是一个包含了 'H'
, 'e'
, 'l'
, 'l'
, 和 'o'
字符序列的字符串。
我们使用双引号来表示 Java 中的字符串。例如:
String type = "Java programming";
在这里,我们创建了一个名为 type
的字符串变量,并初始化内容为 Java Programming
。
!! 注:在 Java 中,字符串不是基本类型(如 int
, char
等)。相反,所有字符串都是名为 String
的预定义类的对象 。所有字符串变量都是 String
类的实例。
示例:在 Java 中创建一个字符串
public class Main {
public static void main(String[] args) {
// 创建字符串
String first = "Java";
String second = "Python";
String third = "JavaScript";
// 打印字符串
System.out.println(first); // 打印 Java
System.out.println(second); // 打印 Python
System.out.println(third); // 打印 JavaScript
}
}
在上面的例子中,我们创建了三个名为的 first
, second
, third字符串
的字符串。
在这里,我们直接使用字符串字面量创建字符串。另外,还有另一种创建 Java 字符串的方法(使用 new
关键字)。我们将在本教程的后面部分了解这一点。
Java 字符串操作
Java String 提供了多个方法来对字符串执行不同的操作。我们了解一些常用的字符串操作。
获取字符串的长度
要查找字符串的长度,我们使用 length()
的方法。例如,
public class Main {
public static void main(String[] args) {
// 创建字符串
String greet = "Hello! World";
System.out.println("String: " + greet);
// 获取字符串长度
int length = greet.length();
System.out.println("Length: " + length);
}
}
输出:
String: Hello! World
Length: 12
在上面的例子中,length()
方法计算字符串中的总字符数并返回它。
连接两个字符串
我们可以使用 concat()
方法连接两个字符串。例如,
public class Main {
public static void main(String[] args) {
String first = "Java ";
System.out.println("第一个字符串:" + first);
String second = "编程";
System.out.println("第二个字符串:" + second);
// 连接字符串
String joinedString = first.concat(second);
System.out.println("Joined String: " + joinedString);
}
}
输出
第一个字符串:Java
第二个字符串:编程
连接字符串:Java 编程
在上面的例子中,我们创建了两个名为 first
和 second
的字符串。 看下面的连接字符串的语句:
String joinedString = first.concat(second);
在这里,通过 concat()
方法连接 first
和 second
并将其分配给 joinedString
变量。
我们还可以使用 +
运算符连接两个字符串。
比较两个字符串
在 Java 中,我们可以使用 equals()
方法在两个字符串之间进行比较。例如,
public class Main {
public static void main(String[] args) {
// 创建 3 个字符串
String first = "java programming";
String second = "java programming";
String third = "python programming";
// 比较 first 和 second
boolean result1 = first.equals(second);
System.out.println("first.equals(second): " + result1);
// 比较 first 和 third
boolean result2 = first.equals(third);
System.out.println("first.equals(third): " + result2);
}
}
输出
first.equals(second): true
first.equals(third): false
在这里,我们使用 equal()
方法来检查一个字符串是否等于另一个。
! 注意:我们还可以使用 ==
运算符比较两个字符串。但是,这种方法与 equals()
方法不同。
Java 字符串的方法
除了上面提到的那些,Java 字符串中还提供了各种方法。以下是其中一些方法:
方法 | 描述 |
---|---|
substring() |
返回字符串的子串 |
replace() |
用指定的新字符替换指定的旧字符 |
charAt() |
返回出现在指定位置的字符 |
getBytes() |
将字符串转换为字节数组 |
indexOf() |
返回指定字符在字符串中的位置 |
compareTo() |
按字典顺序比较两个字符串 |
trim() |
删除任何前导和尾随空格 |
format() |
返回一个格式化的字符串 |
split() |
将字符串分解为字符串数组 |
toLowerCase() |
将字符串转换为小写 |
toUpperCase() |
将字符串转换为大写 |
valueOf() |
返回指定参数的字符串表示 |
toCharArray() |
将字符串转换为 char 数组 |
Java 字符串中的转义字符
转义字符用于转义字符串中存在的某些字符。
假设我们需要在字符串中包含双引号。
// 字符串包含双引号
String example = "This is the "String" class";
由于字符串由双引号表示,因此,上面的代码会导致错误。
为了解决这个问题,我们在 Java 中使用转义字符 \
来转义双引号。如下所示:
// 使用转义字符
String example = "This is the \"String\" class.";
Java 字符串是不可变的
在 Java 中,字符串是不可变的。这意味着,一旦我们创建了一个字符串,就无法更改该字符串。
为了更深入地理解它,考虑一个例子:
// 创建字符串
String example = "Hello! ";
在这里,我们创建了一个名为 example
的字符串变量,变量保存字符串 Hello!
。
现在假设我们要更改字符串。
// 连接另一个字符串 "World"
example = example.concat(" World");
在这里,我们使用 concat()
方法添加另一个字符串 " World"
到上一个字符串 "Hello! "
。
看起来我们可以更改前一个字符串的值,然而这种想法是错误的。
让我们看看这里发生了什么
- JVM 取第一个字符串
"Hello! "
- 通过连接方法创建一个连接了
"Hello! "
和" World"
的新字符串 - 分配新字符串
"Hello! World"
到example
变量 - 第一个字符串
"Hello! "
保持不变
同样,字符串连接操作符 +
每次操作也是返回一个新字符串。
使用 new 关键字创建字符串
由于 Java 中的字符串是对象,因此我们也可以使用 new
关键字创建字符串。例如:
// 使用 new 创建字符串
String name = new String("Java String");
在上面的例子中,我们使用 new
关键字调用 String()
构造方法创建了一个字符串。
要了解有关构造方法的更多信息,请访问 Java 构造方法。
注意: String
该类提供了各种其他构造方法来创建字符串。要了解更多信息,请访问Java String(官方 Java 文档)。
示例:使用 new 关键字创建 Java 字符串
public class Main {
public static void main(String[] args) {
// 创建字符串
String name = new String("Java String");
System.out.println(name);
}
}
使用字面量与 new 关键字创建字符串
现在我们知道了如何使用字符串字面量和 new
关键字创建字符串,让我们看看它们之间的主要区别是什么。
在 Java 中,JVM 维护一个字符串池以将其所有字符串存储在内存中。字符串池有助于重用字符串。
-
在使用字符串字面量创建字符串时,
String example = "Java";
在这里,我们直接提供字符串的值(
Java
)。因此,编译器首先检查字符串池查看该字符串是否已经存在。- 如果字符串已存在,则不会创建新字符串。只将变量,指向已经存在的字符串(
Java
)。 - 如果字符串不存在,则创建新字符串
Java
并添加到字符串池中,再将变量指向字符串池中的字符串。
- 如果字符串已存在,则不会创建新字符串。只将变量,指向已经存在的字符串(
-
使用 new 关键字创建字符串时,比如下面这样:
String example = new String("Java");
则会直接在字符串中重新创建一个空间存储新的字符串。
因此,我们一般不建议使用 new String()
来创建字符串,而是直接使用字符串字面量创建,一方面程序的有利于提高系统的性能,另一方面代码更容易阅读。