Страницы

Поиск по вопросам

среда, 29 января 2020 г.

Java алгоритм поиска подстроки

#java #алгоритм


Как можно модифицировать данный алгоритм, чтобы после определения индекса первого
вхождения подстроки в строку, он продолжить искать такие же подстроки в строке до ее
окончания, а не выходил после первого нахождения. 

public int substring(String file, String value) {

    int fileLength = file.length();
    int valueLength = value.length();
    if (valueLength > fileLength) {
        return -1;
    }
    HashMap cascade = new HashMap();
    for (int i = 0; i <= 255; i++) {
        cascade.put((char) i, valueLength);
    }
    for (int i = 0; i < valueLength - 1; i++) {
        cascade.put(value.charAt(i), valueLength - i - 1);
    }
    int i = valueLength - 1;
    int j = i;
    int k = i;
    while (j >= 0 && i <= fileLength - 1) {
        j = valueLength - 1;
        k = i;
        while (j >= 0 && file.charAt(k) == value.charAt(j)) {
            k--;
            j--;
        }
        i += cascade.get(file.charAt(i));
    }
    if (k >= fileLength - valueLength) {
        return -1;
    } else {
        return k + 1;
    }
}

    


Ответы

Ответ 1



Если решение данной задачи преследует не учебную или академическую, а практическую цель, можно воспользоваться регулярными выражениями. Ниже пример, который находит в строке все подстроки состоящие из буквы "А" и выводит позицию с которой начинается каждая из них. import java.util.regex.Matcher; import java.util.regex.Pattern; . . . Pattern pattern = Pattern.compile("А+"); String s = "АААБББГГГААРРПТВВАААА0"; Matcher matcher = pattern.matcher(s); while(matcher.find()){ System.out.println("Позиция: " + matcher.start()); }

Комментариев нет:

Отправить комментарий