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:
- Uzorak CASE_INSENSITIVE Regularni izraz: 399.387 ns
- String toLowerCase: 434.064 ns
- Apache Commons StringUtils: 496.313 ns
- Podudaranje gudačke regije: 718.842 ns
- 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.