如何在 Java 中逐个字母地反转字符串?

10 Sept 2024 | 5 分钟阅读

反转字符串是一项可以通过多种方式完成典型的编程任务。逐个字母地反转字符串是最直接的技术之一。在本教程中,我们将介绍 Java 中逐个字母地反转字符串。

在深入了解实现之前,让我们先掌握 Java 中字符串的基础知识。在 Java 中,字符串是字符的集合。Java 中的字符串是不可变的,因此一旦创建了字符串对象,就无法更改它。因此,为了反转字符串,必须创建一个新的字符串对象,其中字符按反序排列。

使用循环遍历字符串并将每个字符按反序附加到新字符串中是 Java 中逐个字母地反转字符串的最简单方法。这是关键

ReverseString.java

输出

Original String: Hello World!
Reversed String: !dlroW olleH

让我们分析一下代码。初始字符串首先定义为“Hello World!”。然后,反转后的字符串将存储在一个稍后创建的名为 reversedString 的空字符串中。

之后,我们使用 for 循环从最后一个字符(length-1)开始,到第一个字符(0)结束,向后遍历原始字符串。为了在循环内将原始字符串中的每个字符附加到反转后的字符串,我们使用连接运算符(+)和 charAt() 方法从原始字符串中检索字符。

然后使用 println() 函数打印原始字符串和反转后的字符串。

正如您所见,代码已成功逐个字母地反转了原始字符串。

需要注意的是,这种方法对于添加的每个字符都会在内存中创建一个新的字符串对象,这对于长字符串来说可能效率不高。实际上,与使用 StringBuilder 或 StringBuffer 相比,连接单个字符串来创建反转后的字符串通常是更好的选择。

以下是另外两种在 Java 中逐个字母地反转字符串的方法

逻辑 2:使用字符数组

通过将字符串分解为字符数组,遍历数组,并在数组的末尾交换字符直到它们在中间相遇,也可以在 Java 中反转字符串。这是代码

ReverseString.java

输出

Original String: Hello World!
Reversed String: !dlroW olleH

让我们剖析一下这段代码。首先,我们使用 toCharArray() 方法将原始字符串转换为字符数组。之后,我们将两个指针 left 和 right 分别初始化为数组的第一个和最后一个字符。

然后,在 left 指针越过 right 指针之前,使用 while 循环遍历数组,交换 left 和 right 位置的字符。为此,我们首先将最左边的字符存储在一个临时变量中,然后将其与最右边的字符交换。然后使用临时变量中的字符替换当前位于正确位置的字符。

为了完成迭代,我们最后将 left 指针向右移动,将 right 指针向左移动。

循环完成后,我们使用接受 char 数组作为参数的 String 构造函数,将字符数组转换回字符串。

逻辑 3:使用递归

递归是 Java 中逐个字母地反转字符串的第三种技术。可以创建一个递归函数,该函数以原始字符串的子字符串作为输入并对其进行反转,然后使用省略了第一个字符的子字符串调用自身。这是关键

ReverseString.java

输出

Original String: Hello World!
Reversed String: !dlroW olleH

以代码为例。我们首先将第一个字符串定义为“Hello World!”。然后将原始字符串传递给 reverse() 函数,该函数返回 reversedString 字符串作为其输出。

reverse() 方法是递归的,它以字符串作为输入,并以反转的字符串作为输出。如果输入字符串的长度小于或等于 1,我们只以原始形式返回输入文本。

否则,将使用输入字符串中从第二个字符开始的子字符串(s.substring(1))反复调用 reverse() 方法。然后使用连接运算符(+)将输入字符串的第一个字符(s.charAt(0))添加到已反转的子字符串的末尾。

当递归继续,直到输入字符串被缩减为单个字符时,反转的字符串会从调用堆栈的底部构建起来并返回给调用者。

尽管递归是反转字符串的一种优雅方法,但由于它会在每次递归调用时创建一个新的字符串对象,因此它有时不如其他方法有效。

在 Java 中逐个字母地反转字符串有几种方法,每种方法都有其优点和缺点。性能、可读性和个人偏好只是可能影响您选择的策略的一些变量。

在 Java 中逐个字母地反转字符串是一项简单的任务,可以通过简单的循环来完成。如果您了解 Java 字符串的基础知识和必要的数据结构,就可以轻松地反转任何长度或复杂度的字符串。