
本文详解如何用 substring() 实现字符串反转,并提供包括 StringBuilder、双指针数组、循环拼接等 4 种专业级实现方式,兼顾可读性、性能与教学实用性。
本文详解如何用 `substring()` 实现字符串反转,并提供包括 stringbuilder、双指针数组、循环拼接等 4 种专业级实现方式,兼顾可读性、性能与教学实用性。
在 Java 中,String.substring(int beginIndex, int endIndex) 的设计是左闭右开的——即从 beginIndex(含)开始,到 endIndex(不含)结束,且严格要求 0 ≤ beginIndex ≤ endIndex ≤ string.length()。因此像 word.substring(6, 3) 这类“倒序索引”写法会直接抛出 StringIndexOutOfBoundsException,这是初学者常遇的核心误区。
但值得注意的是:仅靠 substring() 单次调用无法完成反转;它本质是“切片工具”,而非“重构工具”。真正可行的思路是:用 substring() 在循环中逐段提取字符(如每次取末尾一个字符),再拼接成新字符串。下面给出四种规范、可运行的实现方案,全部基于标准 JDK,无需额外依赖。
✅ 方案一:推荐 —— 使用 StringBuilder.reverse()(简洁高效)
这是最符合工程实践的写法,代码简洁、性能最优(时间复杂度 O(n),内部基于字符数组原地交换):
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter a word: ");
String word = input.next();
// 输入校验(保留你原有的数字过滤逻辑)
while (word.matches(".*\d.*")) {
System.out.println("Please enter a valid word!");
word = input.next();
}
String reversed = new StringBuilder(word).reverse().toString();
System.out.println("Reversed word: " + reversed);
input.close();
}
}✅ 方案二:手动双指针反转(深入理解原理)
适用于学习算法逻辑或面试手写——通过 toCharArray() 转为数组,用两个索引 i(头)和 j(尾)向中间靠拢并交换:
立即学习“Java免费学习笔记(深入)”;
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
public static String reverse(String str) {
if (str == null || str.length() <= 1) return str;
char[] chars = str.toCharArray();
for (int i = 0, j = chars.length - 1; i < j; i++, j--) {
char temp = chars[i];
chars[i] = chars[j];
chars[j] = temp;
}
return new String(chars); // 不建议调用 intern(),除非有明确字符串池优化需求
}✅ 方案三:循环 + substring() 拼接(满足题目硬性要求)
此方案显式使用 substring(),每次取最后一个字符(str.substring(len-1))并追加到结果串前,实现“倒序构建”:
public static String reverseUsingSubstring(String str) {
String result = "";
int len = str.length();
for (int i = len - 1; i >= 0; i--) {
result += str.substring(i, i + 1); // 取单个字符:[i, i+1)
}
return result;
}⚠️ 注意:该方式时间复杂度为 O(n²)(因字符串不可变,每次 += 都新建对象),仅适合教学演示,不用于生产环境。
✅ 方案四:纯 substring() 组合(进阶技巧,不推荐)
以下写法虽“只用 substring”,但逻辑晦涩、易错且效率极低,仅作知识拓展:
public static String reversePureSubstring(String str) {
if (str.length() <= 1) return str;
for (int i = 0; i < str.length() - 1; i++) {
str = str.substring(1, str.length() - i)
+ str.charAt(0)
+ str.substring(str.length() - i);
}
return str;
}该逻辑通过反复截取首尾片段重组字符串,但边界计算极易出错,强烈建议避免使用。
? 关键总结
-
substring()本身不支持逆向索引,但可作为“字符提取器”配合循环使用; - 生产代码首选
StringBuilder.reverse()—— 它是 JDK 官方优化过的标准解法; - 手动数组交换有助于理解底层机制,是算法学习的基石;
- 字符串拼接(
+=)在循环中性能差,若坚持用字符串操作,应改用StringBuilder显式追加; - 输入校验逻辑(如过滤数字)应放在读取后立即处理,避免无效计算。
运行任一方案,输入 java 将输出 avaj,输入 hello 输出 olleh —— 简洁、可靠、可扩展。

















