Rozlišovanie malých a veľkých písmen v reťazci Java

1. Prehľad

Existuje mnoho spôsobov, ako skontrolovať, či a String obsahuje podreťazec. V tomto článku budeme hľadať podreťazce v rámci a String pričom sa zameriavame na riešenia, ktoré nerozlišujú veľké a malé písmená String.contains () v Jave. Najdôležitejšie je, že uvedieme príklady riešenia tohto problému.

2. Najjednoduchšie riešenie: String.toLowerCase

Najjednoduchšie riešenie je pomocou String.toLowerCase (). V takom prípade transformujeme oba reťazce na malé písmená a potom použijeme znak obsahuje () metóda:

assertTrue (src.toLowerCase (). obsahuje (dest.toLowerCase ()));

Môžeme tiež použiť String.toUpperCase () a poskytlo by to rovnaký výsledok.

3. String.matches S regulárnymi výrazmi

Ďalšou možnosťou je použitie String.matches () s regulárnymi výrazmi:

assertTrue (src.zhody ("(? i). *" + cieľ + ". *"));

The zápasy() metóda trvá String reprezentovať regulárny výraz. (? i) umožňuje necitlivosť na veľké a malé písmená a .* používa každý znak okrem zlomov riadkov.

4. String.regionMatches

Môžeme tiež použiť String.regionMatches (). Kontroluje, či sú dve String regióny sa zhodujú pomocou pravda pre ignoreCase parameter:

public static boolean 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; návrat nepravdivý; }
assertTrue (processRegionMatches (src, dest));

Aby sa zlepšil výkon, začne sa zhodovať s regiónom, pričom sa zohľadní dĺžka cieľa String. Potom to zmenší iterátor.

5. Vzor Vďaka CASE_INSENSITIVE Možnosť

The java.util.regex.Vzor trieda nám poskytuje spôsob párovania reťazcov pomocou dohadzovač () metóda. V takom prípade môžeme použiť citát () metóda na únik zo všetkých špeciálnych znakov a CASE_INSENSITIVE vlajka. Pozrime sa:

assertTrue (Pattern.compile (Pattern.quote (dest), Pattern.CASE_INSENSITIVE). porovnávač (src) .find ());

6. Apache Commons StringUtils.containsIgnoreCase

Nakoniec využijeme výhody Apache Commons StringUtils trieda:

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

7. Porovnanie výkonu

Rovnako ako v tomto všeobecnom článku o kontrole podreťazcov pomocou obsahuje metódu sme použili open-source framework Java Microbenchmark Harness (JMH) porovnať výkonnosť metód v nanosekundách:

  1. Regulárny výraz vzoru CASE_INSENSITIVE: 399,387 ns
  2. Reťazec toLowerCase: 434,064 ns
  3. Apache Commons StringUtils: 496,313 ns
  4. Zodpovedá oblasť reťazca: 718,842 ns
  5. Reťazcové zhody s regulárnym výrazom: 3964,346 ns

Ako vidíme, víťaz je Vzor s CASE_INSENSITIVE príznak povolený, tesne za ním toLowerCase (). Zaznamenali sme tiež zreteľné zlepšenie výkonu medzi Java 8 a Java 11.

8. Záver

V tomto tutoriáli sme sa pozreli na niekoľko rôznych spôsobov kontroly a String pre podreťazec, pričom ignoruje veľkosť písmen v jazyku Java.

Pozreli sme sa na použitie String.toLowerCase () a toUpperCase (), String.matches (), String.regionMatches ()Apache Commons StringUtils.containsIgnoreCase ()a Pattern.matcher (). Find ().

Tiež sme vyhodnotili výkonnosť každého riešenia a zistili sme, že pomocou zostaviť () metóda z java.util.regex.Vzor s CASE_INSENSITIVE vlajka dopadla najlepšie.

Ako vždy, kód je k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found