Точная ошибка StringIndexOutOfBoundsException: begin 3, end 2, length 13
, она говорит вам, что вы пытаетесь получить подстроку, начинающуюся с индекса 3
и заканчивающуюся индексом 2
, вторым параметром является не длина, а конец, поэтому используйте i+2
Также str.indexOf("XY")
возвращает первый индекс, поэтому вы всегда получите один и тот же результат, поэтому используйте str.indexOf("XY", i)
второй параметр - это индекс в строке, с которого начинается поиск
for (int i = 0; i < str.length() - 3; i++) {
if ("XY".equals(str.substring(i, i + 2))) {
int index = str.indexOf("XY", i);
System.out.println("" + str.charAt(index-1) + str.charAt(index + str1.length()));
}
}
// Outputs
c1
3i
Теперь лучше
Когда вы проверяете, что между i,i+2
у вас есть XY , используйте индекс i
, чтобы сделать получить предыдущий и следующий символы, не нужно снова искать индекс, а также заменить 2
на длину переменной, в которой хранится XY
String find = "XY";
for (int i = 0; i < str.length() - 3; i++) {
if (find.equals(str.substring(i, i + find.length()))) {
System.out.println("" + str.charAt(i - 1) + str.charAt(i + find.length()));
}
}