Számolja meg a karakterek előfordulását egy húrban

1. Áttekintés

Számos módon számolhatjuk az a-ban előforduló char előfordulásait Húr Java-ban.

Ebben a gyors cikkben néhány példára összpontosítunk, hogyan lehet először megszámolni a karaktereket a Java Java könyvtárral, majd más könyvtárakkal és keretrendszerekkel, például Spring és Guava.

2. A Core Java Lib használata

2.1. Imperatív megközelítés

Egyes fejlesztők inkább az alapvető Java-t használják. Számos módon számolhatjuk a karakterek előfordulásait egy karakterláncban.

Kezdjük egy egyszerű / naiv megközelítéssel:

String someString = "elefánt"; char someChar = 'e'; int szám = 0; mert (int i = 0; i <someString.length (); i ++) {if (someString.charAt (i) == someChar) {count ++; }} assertEquals (2, szám);

Nem meglepő, hogy ez működni fog, de - nem is meglepő módon - vannak erre jobb módszerek.

2.2. Rekurzió használata

Kevésbé kézenfekvő, de mégis érdekes megoldás a rekurzió használata:

private static int countOccurences (String someString, char searchedChar, int index) {if (index> = someString.length ()) {return 0; } int count = someString.charAt (index) == searchedChar? 1: 0; return count + countOccurences (someString, searchedChar, index + 1); }

Ezt a rekurzív módszert a következő módon hívhatjuk meg: useRecursionToCountChars („elefánt”, „e”, 0)

2.4. A reguláris kifejezések használata

Egy másik módszer a reguláris kifejezések használata:

Mintaminta = Pattern.compile ("[^ e] * e"); Matcher matcher = minta.matcher ("elefánt"); int szám = 0; while (matcher.find ()) {count ++; } assertEquals (2, szám);

Csak vegye figyelembe, hogy ez a megoldás technikailag helyes, de nem optimális, mivel felesleges a nagyon erőteljes reguláris kifejezéseket használni egy ilyen egyszerű probléma megoldására, mint például a karakter előfordulásainak számának megtalálása egy karakterláncban.

2.5. A Java 8 szolgáltatások használata

A Java 8-ban elérhető új funkciók itt nagyon hasznosak lehetnek.

Használjunk adatfolyamokat és lambdákat a számlálás végrehajtásához:

String someString = "elefánt"; long count = someString.chars (). filter (ch -> ch == 'e'). count (); assertEquals (2, számít); long count2 = someString.codePoints (). filter (ch -> ch == 'e'). count (); assertEquals (2, count2);

Tehát ez egyértelműen tisztább és olvashatóbb megoldás az alapkönyvtár használatával.

3. Külső könyvtárak használata

Most nézzünk meg néhány megoldást, amelyek kihasználják a külső könyvtárak segédprogramjait.

3.1. Használata StringUtils

Általában mindig jobb egy meglévő megoldást használni, ahelyett, hogy feltalálnánk a sajátunkat. A commons.lang.StringUtils osztály biztosítja számunkra a countMatches () módszer, amely felhasználható az adott karakterek vagy akár részhúrok számlálására Húr.

Először bele kell foglalnunk a megfelelő függőséget:

 org.apache.commons commons-lang3 3.5 

A legújabb verziót a Maven Central oldalon találjuk.

Most használjuk countMatches () megszámolni az „e” karakterek számát az „elefánt” karakterláncban:

int count = StringUtils.countMatches ("elefánt", "e"); assertEquals (2, számít);

3.2. Guava használatával

A guava is hasznos lehet a betűszámlálás során. Meg kell határoznunk a függőséget:

 com.google.guava guava 21.0 

A legújabb verziót a Maven Central oldalon találjuk.

Nézzük meg, hogy Guava hogyan tud gyorsan segíteni nekünk a betűszámlálásban:

int count = CharMatcher.is ('e'). countIn ("elefánt"); assertEquals (2, számít);

3.3. A Spring használata

Természetesen nincs értelme hozzáadni a tavaszi keretrendszert a projektjéhez, csak a karakterek számításához. Ha azonban már megvan a projektünkben, akkor csak a countOccurencesOf () módszer:

int count = StringUtils.countOccurrencesOf ("elefánt", "e"); assertEquals (2, számít);

4. Következtetés

Ebben a gyors bemutatóban a karakterek számolásának különféle módjaira összpontosítottunk a Stringben. Néhányat tisztán Java-ban terveztek; néhány további könyvtárakat igényelt.

Javaslatunk, hogy a már meglévő segédprogramokat használja StringUtils, Guava vagy tavasz. Ha azonban valaki csak a sima Java-t kívánja használni, akkor ez a cikk néhány lehetőséget kínál arra, hogy a Java 8-mal éppen ilyen jól teljesítsen.

Ezeknek a példáknak a teljes forráskódja ebben a GitHub projektben érhető el.


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