字符串匹配如何实现

时间:2011-10-06 14:40:49

标签: java string

我有一个类Matcher()如下。 find方法接受两个字符串:pattern(要查找的字符串)和source(要查找的字符串)。示例如果pattern =“abc”和source =“abc cda abc”被传递给find方法。它返回[0 4],即在源0的索引0和索引4处找到模式abc(精确匹配)。无论你传递给模式,它都会将该字符串视为一种模式。如果我想搜索多个模式,而不修改以下Matcher类。最好的方法是什么?例如,我想从其他类调用find方法,如果我有两个模式存储在arraylist中,那么我想先传递一个模式并返回结果并再次传递第二个模式并一次返回结果。我想在源中查找arraylist中的模式或模式后才停止处理。需要你的想法。

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 :(得分:0)

那么,您希望方法find返回索引列表吗?你看过String.indexOf了吗?这可能完全符合您的要求。

答案 1 :(得分:0)

在我看来,你回答了自己的问题。您需要在客户端代码中使用循环来重复调用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对象的键,如果您需要知道哪个模式在哪里。

如果我完全错过了你的观点,请告诉我。

干杯, 院长