Στη Java, πώς μπορώ να ελέγξω αν μια συμβολοσειρά περιέχει μια υποσειρά (αγνοώντας την περίπτωση);

Έχω δύο "Strings", "str1" και "str2". Πώς μπορώ να ελέγξω αν το str2 περιέχεται μέσα στο str1, αγνοώντας την περίπτωση;

Λύση
str1.toLowerCase().contains(str2.toLowerCase())
Σχόλια (9)

Μπορείτε να χρησιμοποιήσετε τη μέθοδο toLowerCase():

public boolean contains( String haystack, String needle ) {
  haystack = haystack == null ? "" : haystack;
  needle = needle == null ? "" : needle;

  // Works, but is not the best.
  //return haystack.toLowerCase().indexOf( needle.toLowerCase() ) > -1

  return haystack.toLowerCase().contains( needle.toLowerCase() )
}

Στη συνέχεια, καλέστε την χρησιμοποιώντας:

if( contains( str1, str2 ) ) {
  System.out.println( "Found " + str2 + " within " + str1 + "." );
}

Παρατηρήστε ότι δημιουργώντας τη δική σας μέθοδο, μπορείτε να την επαναχρησιμοποιήσετε. Στη συνέχεια, όταν κάποιος επισημάνει ότι θα έπρεπε να χρησιμοποιήσετε τη μέθοδο contains αντί της indexOf, έχετε μόνο μία γραμμή κώδικα να αλλάξετε.

Σχόλια (2)

Θα χρησιμοποιούσα έναν συνδυασμό της μεθόδου contains και της μεθόδου toUpper που αποτελούν μέρος της κλάσης String. Ένα παράδειγμα είναι το παρακάτω:

String string1 = "AAABBBCCC"; 
String string2 = "DDDEEEFFF";
String searchForThis = "AABB";

System.out.println("Search1="+string1.toUpperCase().contains(searchForThis.toUpperCase()));

System.out.println("Search2="+string2.toUpperCase().contains(searchForThis.toUpperCase()));

Αυτό θα επιστρέψει:

Search1=true

Σχόλια (2)