Java 字符串

在 Java 中,字符串是一个字符序列。在本教程中,我们通过示例介绍 Java 字符串、如何创建字符串以及字符串的各种方法。

在本教程中,我们通过示例介绍 Java 字符串、如何创建字符串以及字符串的各种方法。

在 Java 中,字符串是一个字符序列。例如, "Hello" 是一个包含了 'H', 'e', 'l', 'l', 和 'o' 字符序列的字符串。

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

String type = "Java programming";

在这里,我们创建了一个名为 type 的字符串变量,并初始化内容为 Java Programming

!! :在 Java 中,字符串不是基本类型(如 intchar 等)。相反,所有字符串都是名为 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 编程

在上面的例子中,我们创建了两个名为 firstsecond 的字符串。 看下面的连接字符串的语句:

String joinedString = first.concat(second);

在这里,通过 concat() 方法连接 firstsecond 并将其分配给 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! "

看起来我们可以更改前一个字符串的值,然而这种想法是错误的。

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

  1. JVM 取第一个字符串 "Hello! "
  2. 通过连接方法创建一个连接了 "Hello! "" World" 的新字符串
  3. 分配新字符串 "Hello! World"example 变量
  4. 第一个字符串 "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() 来创建字符串,而是直接使用字符串字面量创建,一方面程序的有利于提高系统的性能,另一方面代码更容易阅读。