如何查看字符串是否为子字符串。 Java的

时间:2015-11-05 23:55:39

标签: java string for-loop netbeans substring

我无法确定较小的字符串是否是较大字符串的子字符串。 例:     s1 =船     s2 =汽船 这是我的代码。我只能使用for循环和charAt。

public static boolean isSubstring(String s1, String s2){
    boolean substringcheck = false;
    int correct = 0;
    for(int i=0; i<s1.length(); i++){
        for(int j=0; j<s2.length(); j++){
            if(s1.charAt(i) == s2.charAt(j)){      
                correct++;
                for(int n=0; n<s1.length(); n++){
                    if(s1.charAt(n) == s2.charAt(j)){
                        correct++;
                    }else{
                        correct = 0;
                    }
                }
            }
        }
    }
    if(correct == s1.length()){
        substringcheck = true;
    }else{
        substringcheck = false;
    }
    return substringcheck;

}

}

我对在if语句之后放置什么感到困惑,以检查较小字符串中的所有字符是否与我们在较大字符串中找到匹配项后的字符匹配。

3 个答案:

答案 0 :(得分:1)

让我们来看看

s1 = boat
s2 = steamboat
i = 0
j = 0

//walking through the code:

if(b == s) // nope, increment j (j now equals 1), begin next loop iteration

if(b == t) // nope, repeat

if(b == e) // nope, repeat until...

if(b == b) // oh, this looks good! what do we need to do now?

if(b == o) //j got incremented again, doh!

答案 1 :(得分:1)

我想象有两种方法可以做到这一点。第一个基于您的方法。

boolean containmentCheck(String big, String small) {
    boolean contained;
        try {
            for (int i = 0; i < big.length(); i++) {
                contained = big.charAt(i) == small.charAt(0);
                if (contained) {
                    for (int j = 1; j < small.length(); j++) {
                        contained = big.charAt(i + j) == small.charAt(j);
                        if (!contained) {
                            i += j;
                            break;
                        }
                        if (j == small.length() - 1)
                            return contained;
                    }
                }
            }
            if (big.length() == 0 && small.length() == 0)
                contained = true;
        } catch (IndexOutOfBoundsException e) {
            contained = true;
        }
    return contained;
}

第二种情况完全不同,但我认为你会发现它更简单。

boolean containmentCheck(String big, String small) {
    return big.contains(small);
}

这里要学到的教训是:非常仔细地阅读API

答案 2 :(得分:1)

还有一种方法。基本上和Ekemark一样。 你应该知道'继续'是什么。

boolean isStringSubString(String subStr, String mainStr) {
boolean isSubString = false;
//This is important. We need to loop only the difference of length times.
int max = mainStr.length() - subStr.length();

outerLoop : for (int i = 0; i <= max; i++) {      
  int n = subStr.length();
  int j = i;
  int k = 0;
  while (n != 0) {
    if (mainStr.charAt(j++) != subStr.charAt(k++)) {
      continue outerLoop;
    }
    n--;
  }
  isSubString = true;
  break outerLoop;
}
return isSubString;

}