465 Stimmen

Wie kann man in Java prüfen, ob eine Zeichenkette eine andere Zeichenkette enthält, ohne die Groß- und Kleinschreibung zu berücksichtigen?

Angenommen, ich habe zwei Strings,

String s1 = "AbBaCca";
String s2 = "bac";

Ich möchte eine Prüfung durchführen, die Folgendes zurückgibt s2 ist enthalten in s1 . Ich kann dies mit tun:

return s1.contains(s2);

Ich bin mir ziemlich sicher, dass contains() zwischen Groß- und Kleinschreibung unterscheidet, aber ich kann das aus der Dokumentation nicht mit Sicherheit herauslesen. Wenn es ist, dann nehme ich an, meine beste Methode wäre etwas wie:

return s1.toLowerCase().contains(s2.toLowerCase());

Abgesehen davon, gibt es eine andere (möglicherweise bessere) Möglichkeit, dies zu erreichen, ohne sich um die Groß- und Kleinschreibung zu kümmern?

0voto

seth Punkte 1
String container = " Case SeNsitive ";
String sub = "sen";
if (rcontains(container, sub)) {
    System.out.println("no case");
}

public static Boolean rcontains(String container, String sub) {

    Boolean b = false;
    for (int a = 0; a < container.length() - sub.length() + 1; a++) {
        //System.out.println(sub + " to " + container.substring(a, a+sub.length()));
        if (sub.equalsIgnoreCase(container.substring(a, a + sub.length()))) {
            b = true;
        }
    }
    return b;
}

Im Grunde handelt es sich um eine Methode, die zwei Zeichenketten benötigt. Sie soll eine Version von contains() sein, die nicht zwischen Groß- und Kleinschreibung unterscheidet. Wenn Sie die Methode contains verwenden, wollen Sie sehen, ob eine Zeichenkette in der anderen enthalten ist.

Diese Methode nimmt die Zeichenkette "sub" und prüft, ob sie gleich den Teilzeichenketten der Containerzeichenkette ist, die die gleiche Länge wie "sub" haben. Wenn Sie sich die for Schleife sehen Sie, dass sie in Teilstrings (die der Länge des "sub" entsprechen) über die Containerzeichenkette läuft.

Bei jeder Iteration wird geprüft, ob die Teilzeichenkette des Containerstrings equalsIgnoreCase zum U-Boot.

-1voto

Soudipta Dutta Punkte 914

Wir können stream mit anyMatch und contains von Java 8 verwenden

public class Test2 {
    public static void main(String[] args) {

        String a = "Gina Gini Protijayi Soudipta";
        String b = "Gini";

        System.out.println(WordPresentOrNot(a, b));
    }// main

    private static boolean WordPresentOrNot(String a, String b) {
    //contains is case sensitive. That's why change it to upper or lower case. Then check
        // Here we are using stream with anyMatch
        boolean match = Arrays.stream(a.toLowerCase().split(" ")).anyMatch(b.toLowerCase()::contains);
        return match;
    }

}

-1voto

IVY Punkte 1
String x="abCd";
System.out.println(Pattern.compile("c",Pattern.CASE_INSENSITIVE).matcher(x).find());

-2voto

Erick Kondela Punkte 7

Sie könnten einfach so vorgehen:

String s1 = "AbBaCca";
String s2 = "bac";
String toLower = s1.toLowerCase();
return toLower.contains(s2);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X