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:
- Minta CASE_INSENSITIVE reguláris kifejezés: 399,387 ns
- String toLowerCase: 434,064 ns
- Apache Commons StringUtils: 496,313 ns
- Vonós régió mérkőzések: 718,842 ns
- 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.