
本文讲解如何避免stringindexoutofboundsexception错误,通过合理设置循环变量范围,实现两个字符串按字母逆序交替拼接(如"balloon"与"atrophy"→"ynhopoolrltaab")。
本文讲解如何避免stringindexoutofboundsexception错误,通过合理设置循环变量范围,实现两个字符串按字母逆序交替拼接(如"balloon"与"atrophy"→"ynhopoolrltaab")。
在AP Computer Science A课程中,字符串操作常以for循环为核心训练点。实现“两字符串按字母逆序交替拼接”,关键在于同步从末尾遍历两个字符串,并逐个取字符追加到结果中。常见错误(如提问者所遇)是将循环变量 i 初始化为 str1.length() + str2.length(),导致后续调用 str1.substring(i, i+1) 或类似索引访问时越界——因为 substring(beginIndex, endIndex) 要求 beginIndex 必须 ≤ 字符串长度,而 i 已远超任一字符串的合法索引范围(合法索引为 0 到 length()-1)。
✅ 正确思路:
- 使用单个
for循环,但循环次数应取两字符串长度的最大值(Math.max(str1.length(), str2.length())); - 每次迭代中,分别检查当前倒序索引是否仍在各自字符串有效范围内,再安全取字符;
- 从后往前取:对字符串
s,第i次倒序访问对应索引为s.length() - i - 1(当i = 0时取最后一个字符)。
以下是符合AP CSA规范、仅使用for循环和基础字符串方法的参考实现:
计算机网络安全服务公司网站模板是一款适合提供云安全、网络安全、服务器管理。数据安全服务公司宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。
public static String mergeReverse(String a, String b) {
String result = "";
int maxLength = Math.max(a.length(), b.length());
for (int i = 0; i <p>? 注意事项: </p>
- ❌ 不要直接用
substring(i, i+1)处理倒序逻辑——它不适用于动态计算的高位索引,且效率低于charAt(); - ✅ 使用
charAt()更安全、更直观,且 AP CSA 考纲明确支持; - ⚠️ 若题目明确要求“严格交替”(即必须一字符来自a、一字符来自b),需额外处理长度不等时的剩余字符(本题示例"balloon"+"atrophy"→"ynhopoolrltaab"表明是按位置并行取,非严格穿插,故上述逻辑正确);
- ? 测试用例验证:
System.out.println(mergeReverse("balloon", "atrophy")); // 输出: ynhopoolrltaab System.out.println(mergeReverse("ab", "xyz")); // 输出: zyxbxa
总结:StringIndexOutOfBoundsException 的根源几乎总是索引超出了 0 到 length()-1 的边界。在逆序处理中,务必用 length() - 1 - i 计算实际索引,并始终前置条件判断。掌握这一模式,不仅能解决本题,也为后续数组、ArrayList 等索引操作打下坚实基础。










