跳到主要内容

Java字符串

提示
  1. 字符串的基本概念:在Java中,字符串是字符序列,用双引号表示,例如 "Java 编程"。字符串是String类的对象,不是原始类型。
  2. 创建和操作字符串:Java字符串可以通过字面量直接创建或使用new关键字。提供了多种操作方法,如length()获取长度,concat()连接字符串,以及equals()比较字符串。
  3. 字符串的特性:Java中的字符串是不可变的,修改字符串实际上是创建了新的字符串对象。JVM维护了字符串池以促进字符串重用。字符串还支持转义字符以包含特殊字符。

在 Java 中,字符串是字符的序列。例如,"hello" 是包含字符序列 'h''e''l''l''o' 的字符串。

我们使用双引号来表示 Java 中的字符串。例如,

// 创建一个字符串
String type = "Java 编程";

这里,我们创建了一个名为 type 的字符串变量。该变量被初始化为字符串 Java 编程

示例:在 Java 中创建字符串

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
}
}

在上面的示例中,我们创建了三个名为 firstsecondthird 的字符串。在这里,我们像原始类型一样直接创建字符串。

然而,还有另一种创建 Java 字符串的方式(使用 new 关键字)。我们将在本教程后面学习这个。

注意:Java 中的字符串不是原始类型(如 intchar 等)。相反,所有字符串都是预定义类 String 的对象。

并且,所有字符串变量都是 String 类的实例。

Java 字符串操作

Java 字符串提供了各种方法来执行不同的字符串操作。我们将了解一些常用的字符串操作。

1. 获取字符串长度

要找出字符串的长度,我们使用字符串的 length() 方法。例如,

class Main {
public static void main(String[] args) {

// 创建一个字符串
String greet = "Hello! World";
System.out.println("字符串: " + greet);

// 获取 greet 的长度
int length = greet.length();
System.out.println("长度: " + length);
}
}

输出

字符串: Hello! World
长度: 12

在上述示例中,length() 方法计算字符串中的字符总数并返回。要了解更多,请访问 Java String length()

2. 连接两个 Java 字符串

我们可以使用 concat() 方法在 Java 中连接两个字符串。例如,

class Main {
public static void main(String[] args) {

// create first string
String first = "Java ";
System.out.println("First String: " + first);

// create second
String second = "Programming";
System.out.println("Second String: " + second);

// join two strings
String joinedString = first.concat(second);
System.out.println("Joined String: " + joinedString);
}
}

Output

First String: Java
Second String: Programming
Joined String: Java Programming

在上述示例中,我们创建了两个名为 firstsecond 的字符串。请注意以下语句:

String joinedString = first.concat(second);

这里,concat() 方法将 second 字符串连接到 first 字符串,并将其赋值给 joinedString 变量。

我们也可以使用 Java 中的 + 运算符来连接两个字符串。要了解更多,请访问 Java String concat()

3. 比较两个字符串

在 Java 中,我们可以使用 equals() 方法比较两个字符串。例如,

class Main {
public static void main(String[] args) {

// 创建 3 个字符串
String first = "java programming";
String second = "java programming";
String third = "python programming";

// 比较第一个和第二个字符串
boolean result1 = first.equals(second);
System.out.println("Strings first and second are equal: " + result1);

// 比较第一个和第三个字符串
boolean result2 = first.equals(third);
System.out.println("Strings first and third are equal: " + result2);
}
}

输出

Strings first and second are equal: true
Strings first and third are equal: false

在上述示例中,我们创建了名为 firstsecondthird 的 3 个字符串。这里,我们使用 equal() 方法来检查一个字符串是否等于另一个字符串。

equals() 方法在比较字符串时检查它们的内容。要了解更多,请访问 Java String equals()

注意:我们也可以使用 Java 中的 == 运算符来比较两个字符串。然而,这种方法与 equals() 方法不同。要了解更多,请访问 Java String == vs equals()

Java 字符串中的转义字符

转义字符用于在字符串内部转义某些字符。

假设我们需要在字符串中包含双引号。

// 包含双引号
String example = "This is the "String" class";

由于字符串由双引号表示,编译器将把 "This is the " 视为字符串。因此,上述代码将导致错误。

为了解决这个问题,我们在 Java 中使用转义字符 \。例如,

// 使用转义字符
String example = "This is the \"String\" class.";

现在转义字符告诉编译器转义双引号并阅读整个文本。

Java 字符串是不可变的

在 Java 中,字符串是不可变的。这意味着,一旦我们创建了一个字符串,我们就无法更改这个字符串。

为了更深入地理解,考虑一个例子:

// 创建一个字符串
String example = "Hello! ";

这里,我们创建了一个名为 example 的字符串变量。该变量包含字符串 "Hello! "

现在假设我们想要更改这个字符串。

// 添加另一个字符串 "World"
// 到先前的字符串 example
example = example.concat(" World");

这里,我们使用 concat() 方法将另一个字符串 World 添加到之前的字符串。

看起来我们能够更改先前字符串的值。然而,这不是真的

让我们看看这里发生了什么,

  1. JVM 接收第一个字符串 "Hello! "
  2. 通过将 "World" 添加到第一个字符串来创建一个新字符串
  3. 将新字符串 "Hello! World" 分配给 example 变量
  4. 第一个字符串 "Hello! " 保持不变

使用 new 关键字创建字符串

到目前为止,我们像 Java 中的基本类型一样创建了字符串。

由于 Java 中的字符串是对象,我们也可以使用 new 关键字来创建字符串。例如,

// 使用 new 关键

字创建一个字符串
String name = new String("Java String");

在上述示例中,我们使用 new 关键字创建了一个名为 name 的字符串。

这里,当我们创建一个字符串对象时,会调用 String() 构造函数。要了解更多关于构造函数,请访问 Java Constructor

注意String 类提供了各种其他构造函数来创建字符串。要了解更多,请访问 Java String (官方 Java 文档)

示例:使用 new 关键字创建 Java 字符串

class Main {
public static void main(String[] args) {

// 使用 new 创建一个字符串
String name = new String("Java String");

System.out.println(name); // 打印 Java String
}
}

使用字面量与 new 关键字创建字符串

现在我们知道了如何使用字符串字面量和 new 关键字来创建字符串,让我们来看看它们之间的主要区别。

在 Java 中,JVM 维护了一个字符串池来存储内存中的所有字符串。字符串池有助于重用字符串。

  1. 使用字符串字面量创建字符串时,
String example = "Java";

这里,我们直接提供了字符串的值(Java)。因此,编译器首先检查字符串池,看看该字符串是否已存在。

  • 如果字符串已经存在,则不会创建新字符串。相反,新引用 example 指向已经存在的字符串(Java)。
  • 如果字符串不存在,则会创建新字符串(Java)。
  1. 使用 new 关键字创建字符串时,
String example = new String("Java");

这里,字符串的值不是直接提供的。因此,即使 "Java" 已经存在于内存池中,也会创建一个新的 "Java" 字符串。

Java 字符串的方法

除了上述提到的,Java 中还有各种各样的字符串方法。这里是其中一些方法:

方法描述
contains()检查字符串中是否包含子字符串
substring()返回字符串的子串
join()使用分隔符连接给定的字符串
replace()用指定的新字符替换指定的旧字符
replaceAll()替换与正则表达式模式匹配的所有子字符串
replaceFirst()替换第一个匹配的子字符串
charAt()返回指定位置的字符
getBytes()将字符串转换为字节数组
indexOf()返回字符串中指定字符的位置
compareTo()按字典顺序比较两个字符串
compareToIgnoreCase()忽略大小写差异比较两个字符串
trim()删除字符串首尾的空白字符
format()返回格式化后的字符串
split()将字符串分割为字符串数组
toLowerCase()将字符串转换为小写
toUpperCase()将字符串转换为大写
valueOf()返回指定参数的字符串表示形式
toCharArray()将字符串转换为 char 数组
matches()检查字符串是否与给定的正则表达式匹配
startsWith()检查字符串是否以给定的字符串开头
endsWith()检查字符串是否以给定的字符串结尾
isEmpty()检查字符串是否为空
intern()返回字符串的规范化表示形式

| contentEquals() | 检查字符串是否等于 charSequence | | hashCode() | 返回字符串的哈希码 | | subSequence() | 返回字符串的子序列 |