Строка соответствия Как реализовать - PullRequest
0 голосов
/ 06 октября 2011

У меня есть класс Matcher () следующим образом.Метод find принимает две строки: pattern (строка для поиска) и source (строка для поиска).Пример, если pattern = "abc" и source = "abc cda abc" передаются для поиска метода.Возвращает [0 4], то есть шаблон abc (точное совпадение) находится по индексу 0 и индексу 4 источника.Что бы вы ни передавали в шаблон, он будет рассматривать эту строку как один шаблон.Без изменения следующего класса Matcher, если я хочу найти более одного шаблона.Каков наилучший способ сделать это?Например, я хочу вызвать метод find из другого класса, и если у меня есть два шаблона, хранящихся в arraylist, я хочу сначала пропустить один шаблон и вернуть результат, а затем снова передать 2-й шаблон и вернуть результат за один раз.Я хочу прекратить обработку только после того, как оба шаблона или шаблоны в массиве будут найдены в источнике.Нужна твоя идея.

public class Matcher {

    public static List<Integer> find(String pattern, String source) {
        char[] x = pattern.toCharArray(), y = source.toCharArray();
        int i, j, m = x.length, n = y.length;
        List<Integer> result = new ArrayList<Integer>();

        /* Searching */
        for (j = 0; j <= n - m; ++j) {
            for (i = 0; i < m && x[i] == y[i + j]; ++i)
                ;
            if (i >= m)
                result.add(j);
        }

        return result;
    }

}

Ответы [ 2 ]

0 голосов
/ 06 октября 2011

Мне кажется, что вы ответили на свой вопрос. Вам нужно будет использовать цикл в своем клиентском коде для повторных вызовов метода find (). Вы не сможете сделать это за один вызов, если не перепишите свой метод find, чего вы не хотите делать. Ваш код клиента в искаженном псевдокоде:

declare a Matcher object
for (each pattern I want to match)
  call the find method with the pattern and the source string
  store the result
end loop

То, как вы справитесь с результатом, будет зависеть от того, что вам нужно с ним сделать. Вы можете создать объект ArrayList и добавить к нему объекты List. Или вы можете создать HashMap и использовать шаблон в качестве ключа к объектам List, если вам нужно знать, где находится этот шаблон.

Дайте мне знать, если я полностью пропустил вашу мысль.

Ура, декан

0 голосов
/ 06 октября 2011

Итак, вы хотите, чтобы ваш метод find возвращал список индексов? Вы смотрели на String.indexOf ? Это может делать именно то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...