
本文介绍一种不依赖数组的纯字符串操作方法,用于在用户输入的句子中查找首个指定长度的回文子串,并返回该子串;若不存在则返回空字符串,同时自动处理长度越界等边界情况。
在实际开发中,我们常需从一段文本中提取满足特定条件的子串——例如,找出长度恰好为 n 的回文单词。题目明确要求不使用数组(即避免 char[]、ArrayList 等显式数组结构),因此应优先利用 Java 内置的字符串操作方法(如 substring()、StringBuilder.reverse())来实现逻辑。
核心思路是:遍历原字符串中所有长度为 size 的连续子串,对每个子串生成其反转字符串,并直接比较是否相等(注意:回文判定无需区分大小写时可统一转小写,但本题示例未强制要求,故保持原大小写敏感以提升效率;如需忽略大小写,可在比较前调用 .toLowerCase())。
以下是完整、健壮的实现:
public String printPalindrome(String sentence, int size) {
// 边界校验:负长度无效,返回空串
if (size < 0) return "";
// 若请求长度超过原字符串,自动截断为最大可行长度
if (size > sentence.length()) size = sentence.length();
// 滑动窗口遍历所有长度为 size 的子串
for (int i = 0; i + size <= sentence.length(); i++) {
String miniStr = sentence.substring(i, i + size);
String reverseStr = new StringBuilder(miniStr).reverse().toString();
// 直接字符串内容比对(区分大小写)
if (miniStr.equals(reverseStr)) {
return miniStr;
}
}
// 未找到符合条件的回文子串
return "";
}✅ 关键设计说明:
- 使用 StringBuilder.reverse() 替代手动循环拼接,简洁高效,且不涉及任何数组声明;
- substring(i, i + size) 安全提取子串,配合 i + size
- 自动适配 size > sentence.length() 场景,避免异常,提升鲁棒性;
- 方法返回 String 类型,符合“提取回文”的语义,便于后续使用(如打印或进一步处理)。
⚠️ 注意事项:
- 该方法查找的是首个匹配的子串(从左到右),并非全部;若需返回所有结果,需改用 List
并配合 StringBuilder 累加(但会引入集合类,仍不违反“无数组”要求); - 当 size == 0 时,substring(i, i) 返回空字符串,而空串默认视为回文,因此将返回 "" —— 若业务上需排除零长情况,可在开头添加 if (size == 0) return "";;
- 原问题中用户输入“racecar”并指定长度 3,此方法将依次检查 "rac", "ace", "cec",并在 "cec" 处命中并返回,完全符合预期。
综上,该方案以最小语言特性依赖实现了清晰、安全、可读性强的回文子串提取逻辑,是面向基础字符串操作的典型教程级实践。










