Как узнать, является ли данная строка подстрокой из другой строки в Java - PullRequest
6 голосов
/ 26 января 2011

Привет, я должен вычислить, является ли данная строка подстрокой большей строки.Например,

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

Метод «содержит» должен возвращать истину, поскольку str содержит substr (в противном случае - ложь).

Я искал что-то вроде «содержит» в классе String, но яне найти это.Я полагаю, что единственным решением является использование сопоставления с образцом.Если это тот случай, который будет лучшим (самым дешевым) способом сделать это?

Спасибо!

Ответы [ 14 ]

22 голосов
/ 26 января 2011

Там - это a contains() метод!Это было введено в Java 1.5.Если вы используете более раннюю версию, ее легко заменить на следующую:

str.indexOf(substr) != -1
5 голосов
/ 26 января 2011
 String str="hello world";
        System.out.println(str.contains("world"));//true
        System.out.println(str.contains("world1"));//false
2 голосов
/ 11 апреля 2016
  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;
        }

    }
2 голосов
/ 26 января 2011

использовать index. Если он вернет -1, если не найдено ни одного совпадения (содержится в версии 1.5, может быть, вы используете более раннюю версию jdk?), См. Метод "Содержит (CharSequence s)" в классе String в JDK 1.4.2 для деталей

1 голос
/ 22 октября 2016

вот общий метод, который вы можете использовать

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);

}
1 голос
/ 29 мая 2015
    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;
}
1 голос
/ 26 января 2011

Сложность String.indexOf (substr) равна O (n2). Luixv попросил более дешевое решение. Но, насколько я знаю, нет лучшего алгоритма, чем текущий.

1 голос
/ 26 января 2011

Я думаю, что есть функция String, которая выполняет именно то, что вы просите: String.indexOf (String).

См. Ссылку: 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;
}
1 голос
/ 26 января 2011
if (str.indexOf(substr) >= 0) {
    // do something
}
0 голосов
/ 23 ноября 2018
    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 ");
    }
...