Индекс строки вне связанной исключительной ситуации при поиске подстроки в java - PullRequest
0 голосов
/ 23 марта 2020

В этом коде я пытаюсь найти символ (только 1) до и после строки str1 в строке str, используя java

public static void main(String[] args) {
    String str = "abcXY123XYijk";
    String str1 = "XY";

    int[] arr = new int[str.length()];

    for(int i=0;i<str.length()-2;i++){
        if( "XY".equals(str.substring(i,2))){

            int index=str.indexOf("XY");

            System.out.println(String.valueOf(str.charAt(index-1))+String.valueOf(str.charAt(index+str1.length())));
        }
    }
}

1 Ответ

0 голосов
/ 23 марта 2020

Точная ошибка 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()));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...