嗨 我必須計算給定字符串是否是較大字符串的子字符串。 例如如何知道給定的字符串是否是來自Java中另一個字符串的子字符串
String str = "Hallo my world";
String substr = "my"
的方法 「包含了」,因爲海峽含有SUBSTR(否則爲false)應返回true。
我正在尋找類似「包含」的字符串類 ,但我沒有找到它。我想唯一的解決方案是使用 模式匹配。如果這是這樣的情況下會更好(最便宜)的方式 要做到這一點?
謝謝!
嗨 我必須計算給定字符串是否是較大字符串的子字符串。 例如如何知道給定的字符串是否是來自Java中另一個字符串的子字符串
String str = "Hallo my world";
String substr = "my"
的方法 「包含了」,因爲海峽含有SUBSTR(否則爲false)應返回true。
我正在尋找類似「包含」的字符串類 ,但我沒有找到它。我想唯一的解決方案是使用 模式匹配。如果這是這樣的情況下會更好(最便宜)的方式 要做到這一點?
謝謝!
有是 a contains()
方法!它是在Java 1.5中引入的。如果您使用的是較早的版本,那麼它很容易與它來取代它:
str.indexOf(substr) != -1
String str="hello world";
System.out.println(str.contains("world"));//true
System.out.println(str.contains("world1"));//false
使用的indexOf它將返回-1,如果沒有匹配(包含在1.5加入,也許你正在使用舊的JDK?)見"contains(CharSequence s)" method in String class in JDK 1.4.2的細節
if (str.indexOf(substr) >= 0) {
// do something
}
因爲`indexOf()`將返回'0',所以會在`str =「foobar」`和`substr =「foo」`上失敗。 – 2011-01-26 12:43:27
我認爲這是一個字符串函數,它你的要求正是:String.indexOf(字符串)。
請參閱此鏈接:http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#indexOf(java.lang.String)
,那麼你可以寫這個函數:
public boolean isSubstring(String super, String sub) {
return super.indexOf(sub) >= 0;
}
String.indexOf(SUBSTR)複雜度爲O(N2).. Luixv問了一個廉價的解決方案。但據我所知,沒有比現在更好的算法。
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;
}
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;
}
}
這裏要說的是,你可以使用
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);
}
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的子串的一般方法。
`str.indexOf(substr)!= -1`就是答案。 – biziclop 2011-01-26 12:40:59
那麼,在那麼短的時間內,這麼多正確的答案在一起。非常感謝你們。你節省了我很多時間。我正在使用java 1.5,並且正在查看java 1.4.2的文檔,因此我沒有意識到存在「contains」方法。 subindexing方法也可以。 +1給你全部。 – Luixv 2011-01-26 12:51:58
@biziclop萬一你錯過了,你需要在下面的答案部分發布答案。 – dogbane 2011-01-26 12:53:26