How to know if a given string is substring from another string in Java

后端 未结 16 1746
情歌与酒
情歌与酒 2020-12-20 18:58

Hi I have to compute if a given string is substring of a bigger string. For example

String str = \"Hallo my world\";
String substr = \"my\"
<
相关标签:
16条回答
  • 2020-12-20 19:24

    Consider the following code:

    If substring is present then it returns the start index of substring in a given string

    Else returns -1

    public static int isSubstring(String str, String pattern)
    {
        int str_length = str.length();
        int pattern_length = pattern.length();
    
        for (int i = 0; i <= str_length - pattern_length; i++)
        {
            int j;
    
            for (j = 0; j < pattern_length; j++)
                if (str.charAt(i + j) != pattern.charAt(j))
                    break;
    
            if (j == pattern_length)
                return i;
        }
        return -1;
    }
    
    0 讨论(0)
  • 2020-12-20 19:26

    String.indexOf(substr) complexity is O(n2).. Luixv asked a cheaper solution.. But as far as , I know there is no better algorithm than current one.

    0 讨论(0)
  • 2020-12-20 19:26
    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;
    }
    

    This checks if s2 is a substring of s1.

    0 讨论(0)
  • 2020-12-20 19:28

    use indexOf it will return -1 if no match (contains was added in 1.5, maybe you are using older jdk?) see "contains(CharSequence s)" method in String class in JDK 1.4.2 for details

    0 讨论(0)
  • 2020-12-20 19:28
        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;
    }
    
    0 讨论(0)
  • 2020-12-20 19:35
        String str1 = "Java8 makes Java more powerful";
        String str2 = "Java";
        char c;
        char d;
        int count=0;
        boolean match = true;
        for (int i = 0; i < str1.length(); i++) {
            c = str1.charAt(i);
            for (int j = 0; j < str2.length(); j++) {
                d = str2.charAt(j);
                if (c == d) {
                    match = true;
                    count++;
                    if(count== str2.length()){
                        i = str1.length();
                        break;
                    }
                    i++;
                    c = str1.charAt(i);
                } else {
                    match = false;
                }   
            }
        }
    
        if(match == true){
            System.out.println("SubString ");
        }
    
    0 讨论(0)
提交回复
热议问题