Java 中原地反转字符串17 Mar 2025 | 4 分钟阅读 虽然字符串在使用过程中,仍然可以进行反转。由于 Java 中的 String 是不可变的,因此无法反转同一个字符串;但是,通过使用可变的 StringBuilder 或 StringBuffer,您可以限制中间字符串对象的数量。我们之前用于原地反转数组的方法与我们将用于原地反转字符串的方法相同。您必须从字符串的一端移动到另一端,同时交换两端的字符,才能到达字符串的中间。此时,字符串中的字符将被反转。为了实现字符交换,此方法只需要额外的少量内存来存储一个字符。 ![]() 该算法的时间复杂度为 O(n/2),当我说是 O(n) 时,n 实际上是字符串的长度。 每当您需要在应用程序中反转字符串时,都应使用 StringBuilder 的 reverse() 方法。此函数会反转字符串原地字符的顺序。此外,它还能正确处理代理对。如果序列中存在任何代理对,反转操作会将它们视为单个字符。 因此,高低代理的顺序永远不会改变。请注意,反转操作可能会生成以前未与低代理和高代理配对的代理对。例如,反转 "uDC00uD800" 会得到 "uD800uDC00",这是一个有效的代理对。 原地反转字符串的 Java 程序示例下面是一个示例 Java 程序,它解决了原地反转字符串的问题,除了用于跟踪位置的一两个变量外,无需额外内存。在此示例中,我们使用迭代方法来反转字符串。 它首先将字符串转换为 StringBuilder,以便无需创建临时字符串对象即可对其进行修改。然后,它会遍历 StringBuilder 并交换两端的字符,直到到达中间。此时,字符串将被反转,而无需使用任何额外的 RAM。 这是关于字符串编码的一个热门话题,在 Java 和其他语言的编程工作面试中经常被问到。 这是关于字符串编码的一个热门话题,在 Java 和其他语言的编程工作面试中经常被问到。要做好 Java 面试的准备,一种最好的方法是通过这些编码面试课程中提供的挑战来练习。 此图显示了原地反转字符串的逻辑,您可以观察到在我们的循环的每次迭代中字符是如何被交换的。 现在让我们来观察程序的运行情况。 文件名: StringReplacing.java 输出 The original String is : 149 Reversed String is : 941 如您所见,我们只是在 StringBuilder 中交换字符,而不是创建新的 String 实例。使用此算法时,Java 程序员通常会遍历整个字符串,而不是在某个特定点暂停。 错误与我们在原地反转 ArrayList 时讨论过的错误相同。在对字符串进行完整遍历时,将每个字符交换两次会导致它们返回到初始位置,从而使字符串保持不变。 使用 Java 反转字符串所需的全部代码如上所示。相同的算法也可以在 Java 中用于反转任何数组,包括字符串数组和整数数组。在 Java 中,字符串也由字符数组支持。作为额外的练习,您可以尝试使用 Java 非递归地反转任何单向链表。虽然有点困难,但如果您运用逻辑,是可以实现的。 |
java.net.ConnectException: Connection refused: 当客户端-服务器架构中的软件请求从客户端与服务器建立 TCP 连接时,Java 中最常见的网络异常类型是“connection refused: connect”。为了解决通信问题,我们必须谨慎处理此异常……
7 分钟阅读
在安全通信和数据保护领域,加密库起着举足轻重的作用。Bouncy Castle for Java 就是这样一个获得广泛认可的库。该库提供了一套全面的加密算法和协议,为开发人员提供了强大的基础,用于...
阅读 4 分钟
图像处理是数字媒体和内容管理部门的一个主要领域,其应用范围从简单的照片编辑到高级计算机视觉任务。图像处理中的一个典型应用是水印:将可识别的徽标、文本或图像叠加在...
7 分钟阅读
在 Java 中,JSON 在存储数据方面发挥着重要作用。ArrayList 是一种特殊的 Array,其大小是动态的。它还可以随时用于存储或删除数据。ArrayList 使用 List 的所有方法,并维护插入顺序,因为它实现了...
阅读 3 分钟
问题描述 向您展示一个由 m 行和 n 列组成的矩阵。目的是识别矩阵中所有行都共有的项。解决方案应有效地返回这些公共元素,同时考虑时间和空间复杂度。解决方法要解决此...
阅读 6 分钟
?在本节中,我们将理解打印表格的逻辑,并在 Java 程序中实现该逻辑。表格(或乘法表)是使用乘法生成的数字序列。我们输入一个整数,打印出我们想要打印的...的表格。
阅读 2 分钟
在 Java 中,Iterator 和 ListIterator 都用于遍历集合。Iterator 允许仅向前遍历,并提供 next() 和 remove() 等基本操作。相比之下,ListIterator 支持双向遍历,以及 add()、set() 和 previous() 等附加操作,使其更加通用。Iterator Iterator 接口是...
5 分钟阅读
骰子游戏几个世纪以来一直吸引着玩家,散发着机遇和兴奋的光环。技术的出现使我们能够将这些体验带入数字领域,创造机会来制作引人入胜的模拟,捕捉掷骰子的精髓。在本节中,我们将...
5 分钟阅读
在 Java 中,final 和不可变性是与对象状态和修改相关的关键概念。这两个概念处理不同的方面,即对象及其状态是如何管理的。在本节中,我们将讨论 Java 中 final 和不可变性之间的区别。Java final 关键字 final 关键字在...
阅读 4 分钟
Lambda 表达式在 Java 8 中引入,是编写简洁、函数式代码的强大工具。Lambda 表达式是一个匿名函数,可用于实现函数式接口定义的方法。函数式接口是只定义了一个...的接口。
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India