2011-01-26 126 views
4

嗨 我必須計算給定字符串是否是較大字符串的子字符串。 例如如何知道給定的字符串是否是來自Java中另一個字符串的子字符串

String str = "Hallo my world"; 
String substr = "my" 

的方法 「包含了」,因爲海峽含有SUBSTR(否則爲false)應返回true。

我正在尋找類似「包含」的字符串類 ,但我沒有找到它。我想唯一的解決方案是使用 模式匹配。如果這是這樣的情況下會更好(最便宜)的方式 要做到這一點?

謝謝!

+2

`str.indexOf(substr)!= -1`就是答案。 – biziclop 2011-01-26 12:40:59

+0

那麼,在那麼短的時間內,這麼多正確的答案在一起。非常感謝你們。你節省了我很多時間。我正在使用java 1.5,並且正在查看java 1.4.2的文檔,因此我沒有意識到存在「contains」方法。 subindexing方法也可以。 +1給你全部。 – Luixv 2011-01-26 12:51:58

+0

@biziclop萬一你錯過了,你需要在下面的答案部分發布答案。 – dogbane 2011-01-26 12:53:26

回答

17

a contains()方法!它是在Java 1.5中引入的。如果您使用的是較早的版本,那麼它很容易與它來取代它:

str.indexOf(substr) != -1 
4
String str="hello world"; 
     System.out.println(str.contains("world"));//true 
     System.out.println(str.contains("world1"));//false 
1
if (str.indexOf(substr) >= 0) { 
    // do something 
} 
+0

因爲`indexOf()`將返回'0',所以會在`str =「foobar」`和`substr =「foo」`上失敗。 – 2011-01-26 12:43:27

1

String.indexOf(SUBSTR)複雜度爲O(N2).. Luixv問了一個廉價的解決方案。但據我所知,沒有比現在更好的算法。

1
public boolean isSubString(String smallStr, String largerStr) { 
    char[] larger = largerStr.toCharArray(); 
    char[] smaller = smallStr.toCharArray(); 

    int i = 0; 

    for (int j = 0; j < larger.length; j++) { 
     if(larger[j] == smaller[i]){ 
      if(i == smaller.length -1){ 
       //done we found that this string is substring 
       return true; 
      } 
      i++; 
      continue; 
     }else{ 
      if(i > 0){ 
       //that means we encountered a duplicate character before and if string was substring 
       // it shouldn't have hit this condition.. 
       if(larger.length - j >= smaller.length){ 
        i = 0; 
        //reset i here because there are still more characters to check for substring.. 
       }else{ 
        //we don't have enough characters to check for substring.. so done.. 
        return false; 
       } 

      } 
     } 

    } 

    return false; 
} 
2
String s = "AJAYkumarReddy"; 
    String sub = "kumar"; 
    int count = 0; 
    for (int i = 0; i < s.length(); i++) { 
     if (s.charAt(i) == sub.charAt(count)) { 
      count++; 
     } else { 
      count = 0; 
     } 
     if (count == sub.length()) { 
      System.out.println("Sub String"); 
      return; 
     } 

    } 
1

這裏要說的是,你可以使用

public static boolean isSubstring(String s1, String s2) { 
    if(s1.length() == s2.length()) 
     return s1.equals(s2); 
    else if(s1.length() > s2.length()) 
     return s1.contains(s2); 
    else 
     return s2.contains(s1); 

} 
0
public static boolean isSubstring(String s1, String s2){ 
    if(s1.length()<s2.length()) return false; 
    if(s1.length()==s2.length()) return s1.equals(s2); 
    for(int i=0;i<=s1.length()-s2.length();i++){ 
     if(s1.charAt(i)==s2.charAt(0)){ 
      int matchLength=1; 
      for(int j=1;j<s2.length();j++){ 
       if(s1.charAt(i+j)!=s2.charAt(j)){ 
        break; 
       } 
       matchLength++; 
      } 
      if(matchLength==s2.length()) return true; 
     } 
    } 
    return false; 
} 

此檢查S2是S1的子串的一般方法。

相關問題