Java程序匹配"barbara"仅在76位终止,9-16位不终止求解决
问题分析与解决建议
核心问题
你的代码无法匹配到9-16位置的"barbara",原因是匹配失败时没有回溯索引:一旦中途某个字符不匹配,程序会直接推进全局索引继续往后走,不会回到之前尝试匹配的起始位置的下一个字符重新检查,导致错过前面的有效匹配。
比如输入中9-16位置的"barbara",当程序从第一个"b"开始匹配,若中途某个字符不符合,索引直接跳走,不会回头检查这个"b"之后的字符是否能构成完整匹配。
解决方法
方法1:手动实现带回溯的匹配(适合理解匹配逻辑)
通过遍历每个位置,检查从当前位置开始是否能完整匹配目标字符串,匹配失败则移动到下一个位置继续尝试:
public class Main { private static String input = "p2ce9unfvbarbarbara2ehv29p4hrv2rn8h2cyr12gxbarsdg34rbarabarabarbarbarbarbarasdfgsfhhr"; private static final String TARGET = "barbara"; public static void main(String[] args) { int index = 0; // 遍历到输入字符串剩余长度足够容纳目标字符串的位置 while (index <= input.length() - TARGET.length()) { boolean isMatched = true; // 检查当前位置开始的字符是否完全匹配目标 for (int i = 0; i < TARGET.length(); i++) { if (input.charAt(index + i) != TARGET.charAt(i)) { isMatched = false; break; } } if (isMatched) { index += TARGET.length(); break; } // 匹配失败,移动到下一个位置重试 index++; } System.out.println(index); } }
方法2:使用Java内置字符串匹配方法(简洁高效,适合新手)
直接利用Java String类的indexOf方法快速定位目标字符串,代码更简洁:
public class Main { private static String input = "p2ce9unfvbarbarbara2ehv29p4hrv2rn8h2cyr12gxbarsdg34rbarabarabarbarbarbarbarasdfgsfhhr"; public static void main(String[] args) { String target = "barbara"; // 获取目标字符串的起始索引 int startIndex = input.indexOf(target); if (startIndex != -1) { // 终止时的索引为起始索引加上目标字符串长度 System.out.println(startIndex + target.length()); } else { System.out.println("未找到匹配的字符串"); } } }
两种方法都能正确匹配到输入中所有位置的"barbara",并在匹配到第一个实例时终止程序。
内容的提问来源于stack exchange,提问作者Strle
相关产品推荐
相关产品推荐

