Java判断字符串是否回文推荐双指针法:左右指针跳过非字母数字字符并转小写后比较,时间O(n)、空间O(1);也可用StringBuilder反转比较,代码简洁但空间O(n);需处理null、空串及单字符等边界情况。

Java 中判断字符串是否回文,核心是检查它正着读和反着读是否完全一样(忽略大小写和非字母数字字符时需先标准化)。最直接的方法是双指针或反转比较。
方法一:双指针逐字符比对(推荐,高效且不额外占用空间)
用两个指针分别从开头和结尾向中间移动,跳过非字母数字字符,并统一转为小写后比较:
- 初始化 left = 0,right = str.length() - 1
- 循环中,跳过 left 处非字母数字字符(Character.isLetterOrDigit)
- 同样跳过 right 处非字母数字字符
- 将左右字符转为小写,若不相等,直接返回 false
- left++,right--,继续直到 left >= right
✅ 优点:时间 O(n),空间 O(1),适合长字符串或对内存敏感场景。
方法二:反转字符串再比较(简洁易懂)
借助 StringBuilder 快速反转,再与原字符串(标准化后)比较:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
- 先用正则 str.replaceAll("[^a-zA-Z0-9]", "") 清除非字母数字字符
- 转为小写:toLowerCase()
- 用 new StringBuilder(cleaned).reverse().toString() 得到反转串
- 用 equals() 比较原 cleaned 串和反转串
✅ 优点:代码短、逻辑清晰;⚠️ 缺点:创建新字符串,空间 O(n)。
注意边界情况
空字符串 "" 和单字符(如 "a")按定义都是回文;null 需要提前判空避免 NullPointerException。建议封装成工具方法并加 null 安全处理:
- if (str == null) return false;
- if (str.length()
简单示例(双指针版)
public static boolean isPalindrome(String str) {
if (str == null) return false;
str = str.toLowerCase();
int l = 0, r = str.length() - 1;
while (l if (!Character.isLetterOrDigit(str.charAt(l))) { l++; continue; }
if (!Character.isLetterOrDigit(str.charAt(r))) { r--; continue; }
if (str.charAt(l) != str.charAt(r)) return false;
l++; r--;
}
return true;
}

















