Podudaranje nizova bez velikih i malih slova u Javi

1. Pregled

Postoji mnogo načina kako provjeriti je li Niz sadrži podniz. U ovom ćemo članku tražiti podnizove unutar Niz dok se usredotočuje na zaobilazna rješenja koja ne uključuju velika i mala slova String.contens () na Javi. Što je najvažnije, pružit ćemo primjere kako riješiti ovaj problem.

2. Najjednostavnije rješenje: String.toLowerCase

Najjednostavnije rješenje je pomoću String.toLowerCase (). U ovom ćemo slučaju transformirati oba niza u mala slova, a zatim upotrijebiti sadrži () metoda:

assertTrue (src.toLowerCase (). sadrži (dest.toLowerCase ()));

Možemo i koristiti String.toUpperCase () i pružio bi isti rezultat.

3. Niz.podudaranja Uz regularne izraze

Druga je mogućnost pomoću String.matches () s regularnim izrazima:

assertTrue (src.matches ("(? i). *" + dest + ". *"));

The podudaranja () metoda uzima String predstavljati regularni izraz. (? i) omogućuje neosjetljivost na velika i mala slova i .* koristi svaki znak osim prijeloma retka.

4. String.regionMatches

Možemo i koristiti String.regionMatches (). Provjerava jesu li dvije Niz regije podudaraju, koristeći pravi za ignoreCase parametar:

javna statička logička processRegionMatches (String src, String dest) {for (int i = src.length () - dest.length (); i> = 0; i--) if (src.regionMatches (true, i, dest, 0, dest.length ())) return true; return false; }
assertTrue (processRegionMatches (src, dest));

Da bi se poboljšala izvedba, počinje se podudarati s regijom, uzimajući u obzir dužinu odredišta Niz. Zatim, umanjuje iterator.

5. Uzorak Uz CASE_INSENSITIVE Opcija

The java.util.regex.Pattern klasa pruža nam način podudaranja nizova pomoću podudaranje () metoda. U ovom slučaju možemo koristiti citat() metoda za bijeg od bilo kakvih posebnih znakova, a CASE_INSENSITIVE zastava. Pogledajmo:

assertTrue (Pattern.compile (Pattern.quote (dest), Pattern.CASE_INSENSITIVE) .matcher (src) .find ());

6. Apache Commons StringUtils.containsIgnoreCase

Napokon ćemo iskoristiti Apache Commons StringUtils razred:

assertTrue (StringUtils.containsIgnoreCase (src, dest));

7. Usporedba izvedbe

Kao u ovom općenitom članku o provjeri podnizova pomoću sadrži metodu koristili smo otvoreni izvorni okvir Java Microbenchmark Harness (JMH) za usporediti izvedbu metoda u nanosekundama:

  1. Uzorak CASE_INSENSITIVE Regularni izraz: 399.387 ns
  2. String toLowerCase: 434.064 ns
  3. Apache Commons StringUtils: 496.313 ns
  4. Podudaranje gudačke regije: 718.842 ns
  5. Niz se podudara s regularnim izrazom: 3964.346 ns

Kao što vidimo, pobjednik je Uzorak s CASE_INSENSITIVE omogućena zastava, usko praćena toLowerCase (). Također smo primijetili jasno poboljšanje performansi između Jave 8 i Jave 11.

8. Zaključak

U ovom smo tutorijalu pogledali nekoliko različitih načina provjere a Niz za podniz, zanemarujući slučaj u Javi.

Gledali smo korištenje String.toLowerCase () i toUpperCase (), String.matches (), String.regionMatches (), Apache Commons StringUtils.containsIgnoreCase (), i Pattern.matcher (). Find ().

Također, procijenili smo izvedbu svakog rješenja i utvrdili da se pomoću sastaviti() metoda iz java.util.regex.Pattern s CASE_INSENSITIVE zastava se najbolje pokazala.

Kao i uvijek, kôd je dostupan na GitHub-u.