Java 字符串

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

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

// create a string
String type = "Java programming";

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


示例:在Java中创建字符串

class Main {
  public static void main(String[] args) {
    
    // create strings
    String first = "Java";
    String second = "Python";
    String third = "JavaScript";

    // print strings
    System.out.println(first);   // print Java
    System.out.println(second);  // print Python
    System.out.println(third);   // print JavaScript
  }
}

在上面的示例中,我们创建了三个名为firstsecondthird的字符串。

在这里,我们直接像原始类型一样创建字符串。

但是,还有另一种创建Java字符串的方法(使用new关键字)。

我们将在本教程稍后学习。

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

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


Java String 操作

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

1. 获取字符串长度

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

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

    // create a string
    String greet = "Hello! World";
    System.out.println("String: " + greet);

// get the length of greet int length = greet.length();
System.out.println("Length: " + length); } }

输出

String: Hello! World
Length: 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); } }

输出

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) {

    // create 3 strings
    String first = "java programming";
    String second = "java programming";
    String third = "python programming";

// compare first and second strings boolean result1 = first.equals(second);
System.out.println("Strings first and second are equal: " + result1);
// compare first and third strings 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

在上面的示例中,我们创建了3个名为firstsecondthird的字符串。

在这里,我们使用equal()方法来检查一个字符串是否等于另一个字符串。

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

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


Java字符串中的转义字符

转义字符用于转义字符串中存在的某些字符。

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

// include double quote 
String example = "This is the "String" class";

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

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

// use the escape character
String example = "This is the \"String\" class.";

现在,转义字符会告诉编译器转义双引号并读取所有文本。


Java字符串是不可变的

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

为了更透彻地理解这一点,请看一个例子

// create a string
String example = "Hello! ";

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

现在,假设我们要更改字符串。

// add another string "World"
// to the previous tring example
example = example.concat(" World");

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

看起来我们能够更改前一个字符串的值。但是,这是不正确的

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

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

使用New关键字创建字符串

到目前为止,我们已经像Java中的原始类型一样创建了字符串。

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

// create a string using the new keyword
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) {

// create a string using new String name = new String("Java String");
System.out.println(name); // print Java String } }

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

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

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

1. 使用字符串字面量创建字符串时,

String example = "Java";

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

  • 如果字符串已存在,则不会创建新字符串。相反,新的引用example指向已存在的字符串(Java)。
  • 如果字符串不存在,则会创建一个新字符串(Java)。

2. 使用new关键字创建字符串时,

String example = new String("Java");

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


Java String 方法

除了上面提到的,Java中还有各种字符串方法。以下是一些方法:

方法 描述
contains() 检查字符串是否包含子字符串。
substring() 返回字符串的子字符串。
join() 使用分隔符连接给定的字符串。
replace() 将指定的旧字符替换为指定的\u82af新字符。
replaceAll() 替换所有匹配正则表达式的子字符串。
replaceFirst() 替换第一个匹配的子字符串。
charAt() 返回指定位置的字符。
getBytes() 将字符串转换为字节数组。
indexOf() 返回字符串中指定字符的位置。
compareTo() 按字典顺序比较两个字符串。
compareToIgnoreCase() 比较两个字符串,忽略大小写差异。
trim() 删除任何前导和尾随空格。
format() 返回格式化的字符串。
split() 将字符串分解为字符串数组。
toLowerCase() 将字符串转换为小写。
toUpperCase() 将字符串转换为大写。
valueOf() 返回指定参数的字符串表示形式。
toCharArray() 将字符串转换为char数组。
matches() 检查字符串是否与给定的正则表达式匹配。
startsWith() 检查字符串是否以给定的字符串开头。
endsWith() 检查字符串是否以给定的字符串结尾。
isEmpty() 检查字符串是否为空。
intern() 返回字符串的规范表示。
contentEquals() 检查字符串是否等于charSequence。
hashCode() 返回字符串的哈希码。
subSequence() 从字符串中返回一个子序列。

在我们结束之前,让我们测试一下你对Java字符串的知识!你能解决下面的挑战吗?

挑战

编写一个函数来检查字符串是否为空。

  • 如果字符串str为空,则返回"String is empty"。否则,返回"String isn't empty"
  • 例如,如果str = "Hello World!",则预期输出为"String isn't empty"
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战