使用基本Java方法查找字符串中的模式

时间:2014-11-16 16:58:41

标签: java string character

说我们有一个包含这些字符的字符串     “ABGCCFFGTBG”

然后我们有另一个字符串“GECCCDOABG”

因此模式是前缀和后缀,但是如果你的给定字符串大于此但具有公共前缀和后缀模式,那么如何将它们拉出到java中的子字符串中。请记住,我们并不总是知道字符串中的字符让我们知道其中有一个模式。

我的开始是这样的

for(int i = 0. i < strA.length(); i++)
{
    for(int j = 0; j < strB.length(); j++)
    {
       if(strA.charAt(i) == strB.charAt(j))
       {
          String subPattern = strA.substring(0,i);
          String subPattern2 = strB.substring(0,j);
       }
    }
}  

但这不起作用。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

首先尝试选择最匹配的模式:

public static void main(String[] args) {
    String strA = "ABGCCFFGTBG";
    String strB = "GECCCDOABG";
    System.out.println("Pattern: " + findPattern(strA, strB));
}

public static String findPattern(String strA, String strB) {
    for (int length = Math.min(strA.length(), strB.length()); length > 0; length--) {
        for (int i = 0; i <= strA.length() - length; i++) {
            String pattern = strA.substring(i, i + length);
            if (strB.contains(pattern)) {
                return pattern;
            }
        }
    }
    throw new NoSuchElementException("No common pattern between " + strA + " and " + strB);
}

输出:

Pattern: ABG

答案 1 :(得分:0)

这个解决方案会找到一个模式,无论它在字符串中的哪个位置:

public static void main(String[] args) {

    String strA = "uioABCDqwert";
    String strB = "yxcvABCDwrk";

    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < strA.length(); i++) {
        for (int j = 0; j < strB.length(); j++) {
            if (strA.charAt(i) == strB.charAt(j)) {
                sb.append(strB.charAt(j));
                i++;
            }
        }
        if (sb.length() > 0)
            break;
    }

    System.out.println(sb.toString());
}

这可以让你知道如何做到这一点