字符串反转需生成新字符串,常用StringBuilder.reverse()、手动遍历或双指针交换;回文校验推荐双指针法,预处理时清洗非字母数字并转小写,空串和单字符默认为回文。

Java 中字符串反转和回文校验是基础但高频的操作,核心在于理解字符串的不可变性,以及合理选择工具(如 StringBuilder、双指针或流式处理)。
字符串反转的常用方式
由于 String 是不可变的,反转必须生成新字符串。推荐以下几种简洁可靠的方法:
-
使用 StringBuilder(最常用):调用
new StringBuilder(str).reverse().toString(),底层基于字符数组翻转,高效且可读性强。 -
手动遍历拼接(适合理解原理):从后往前遍历原字符串,逐个追加到
StringBuilder或StringBuffer,避免用+拼接(防止频繁创建对象)。 -
字符数组转换法:
char[] chars = str.toCharArray();,然后用双指针交换首尾元素,最后new String(chars)构造新串。
回文串校验的实现逻辑
回文即正读反读都一致(忽略大小写、空格、标点时需预处理)。关键在于“比较对称位置的字符”:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
双指针法(推荐):定义左右两个索引,分别从开头和末尾向中间移动,逐对比较对应字符。遇到不等则返回
false;指针相遇或交错即为回文。 -
反转对比法:先反转字符串,再与原串
equalsIgnoreCase()比较。简单直观,但多一次空间开销,适合短字符串或教学演示。 -
忽略非字母数字的回文判断:先用正则
str.replaceAll("[^a-zA-Z0-9]", "")清洗,再转小写,最后双指针校验。
注意事项与常见误区
实际编码中容易忽略细节,导致逻辑错误或性能问题:
立即学习“Java免费学习笔记(深入)”;
- 空串和单字符默认是回文,校验方法需自然支持(双指针初始时 left ≥ right 就直接返回 true)。
-
不要用 == 比较字符串内容,务必用
equals()或equalsIgnoreCase()。 - 区分大小写需明确需求:若题目要求“忽略大小写”,清洗后统一转小写再比;否则严格按 ASCII 值比较。
-
StringBuilder 的 reverse() 不影响原对象,它返回的是当前对象引用(链式调用安全),但原
StringBuilder实例内容已被修改。
一个完整示例(含清洗与校验)
判断 "A man, a plan, a canal: Panama" 是否为回文:
public static boolean isPalindrome(String s) {
if (s == null) return false;
String cleaned = s.replaceAll("[^a-zA-Z0-9]", "").toLowerCase();
int left = 0, right = cleaned.length() - 1;
while (left < right) {
if (cleaned.charAt(left++) != cleaned.charAt(right--)) {
return false;
}
}
return true;
}

















