Kis- és nagybetűk nélküli karakterlánc-illesztés Java-ban

1. Áttekintés

Számos módja van annak ellenőrzésére, hogy a Húr tartalmaz egy sztringet. Ebben a cikkben alszövegeket fogunk keresni a Húr miközben az esetekre nem érzékeny megoldásokra összpontosít A karakterlánc. Tartalmaz () Java-ban. A legfontosabb, hogy példákat adunk a probléma megoldására.

2. A legegyszerűbb megoldás: String.toLowerCase

A legegyszerűbb megoldás a String.toLowerCase (). Ebben az esetben mindkét karakterláncot kisbetűvé alakítjuk, majd a tartalmaz () módszer:

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

Használhatjuk is String.toUpperCase () és ugyanazt az eredményt nyújtaná.

3. String.matches Reguláris kifejezésekkel

Egy másik lehetőség a String.matches () szabályos kifejezésekkel:

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

A mérkőzések () módszer S-t vesz feltring hogy a szabályos kifejezést képviselje. (?én) lehetővé teszi eset-érzéketlenség és .* minden karaktert használ, kivéve a sortöréseket.

4. String.regionMatches

Használhatjuk is String.regionMatches (). Ellenőrzi, hogy kettő van-e Húr régiók egyeznek, a igaz a ignoreCase paraméter:

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; return false; }
assertTrue (processRegionMatches (src, dest));

A teljesítmény javítása érdekében megkezdi a régió illesztését, figyelembe véve a cél hosszát Húr. Ezután csökken az iterátor.

5. Minta A ... val CASE_INSENSITIVE választási lehetőség

A java.util.regex.Pattern osztály lehetőséget nyújt számunkra a karakterláncok illesztésére a egyező () módszer. Ebben az esetben használhatjuk a idézet() módszer a speciális karakterek elkerülésére, és a CASE_INSENSITIVE zászló. Lássuk:

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

6. Apache Commons A StringUtils.containsIgnoreCase

Végül kihasználjuk az Apache Commons előnyeit StringUtils osztály:

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

7. Teljesítmény-összehasonlítás

Ahogy ebben az általános cikkben is olvasható az alstringek ellenőrzéséről a tartalmazza módszerrel a nyílt forráskódú Java Microbenchmark Harness (JMH) keretet használtuk hasonlítsa össze a módszerek teljesítményét nanoszekundumokban:

  1. Minta CASE_INSENSITIVE reguláris kifejezés: 399,387 ns
  2. String toLowerCase: 434,064 ns
  3. Apache Commons StringUtils: 496,313 ns
  4. Vonós régió mérkőzések: 718,842 ns
  5. Karakterláncok a reguláris kifejezéssel: 3964.346 ns

Mint láthatjuk, a nyertes az Minta a ... val CASE_INSENSITIVE zászló engedélyezve, szorosan követve toLowerCase (). A Java 8 és a Java 11 teljesítményének egyértelmű javulását is észrevettük.

8. Következtetés

Ebben az oktatóanyagban megvizsgáltunk néhány különböző módszert az a ellenőrzésére Húr szubsztringhez, miközben figyelmen kívül hagyja a Java esetét.

Megnéztük a felhasználást String.toLowerCase () és toUpperCase (), String.matches (), String.regionMatches (), Apache Commons StringUtils.containsIgnoreCase (), és Pattern.matcher (). Find ().

Kiértékeltük az egyes megoldások teljesítményét, és megállapítottuk, hogy a összeállít () módszer től java.util.regex.Pattern a ... val CASE_INSENSITIVE zászló teljesített a legjobban.

Mint mindig, a kód elérhető a GitHubon.


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