Tel het aantal keren dat een teken in een string voorkomt

1. Overzicht

Er zijn veel manieren om het aantal keren dat een teken voorkomt in een Draad in Java.

In dit korte artikel zullen we ons concentreren op een paar voorbeelden van het tellen van tekens, eerst met de Java-kernbibliotheek en vervolgens met andere bibliotheken en frameworks zoals Spring en Guava.

2. Met behulp van Core Java Lib

2.1. Dwingende aanpak

Sommige ontwikkelaars geven er misschien de voorkeur aan om kern-Java te gebruiken. Er zijn veel manieren om het aantal keren dat een teken voorkomt in een string te tellen.

Laten we beginnen met een simpele / naïeve benadering:

String someString = "olifant"; char someChar = 'e'; int count = 0; for (int i = 0; i <someString.length (); i ++) {if (someString.charAt (i) == someChar) {count ++; }} assertEquals (2, count);

Het is niet verrassend dat dit zal werken, maar - ook niet verrassend - er zijn betere manieren om dit te doen.

2.2. Recursie gebruiken

Een minder voor de hand liggende, maar nog steeds interessante oplossing is om recursie te gebruiken:

privé statische int countOccurences (String someString, char seekChar, int index) {if (index> = someString.length ()) {return 0; } int count = someString.charAt (index) == gezochtChar? 1: 0; retourneer count + countOccurences (someString, searchChar, index + 1); }

We kunnen deze recursieve methode op de volgende manier aanroepen: useRecursionToCountChars ("olifant", ‘e ', 0)

2.4. Reguliere expressies gebruiken

Een andere manier zou zijn om reguliere expressies te gebruiken:

Pattern pattern = Pattern.compile ("[^ e] * e"); Matcher matcher = pattern.matcher ("olifant"); int count = 0; while (matcher.find ()) {count ++; } assertEquals (2, count);

Merk op dat deze oplossing technisch correct is, maar niet optimaal, aangezien het overdreven is om de zeer krachtige reguliere expressies te gebruiken om zo'n eenvoudig probleem op te lossen, zoals het vinden van het aantal keren dat een teken in een string voorkomt.

2.5. Java 8-functies gebruiken

Nieuwe functies die beschikbaar zijn in Java 8 kunnen hier erg nuttig zijn.

Laten we streams en lambda's gebruiken om de telling te implementeren:

String someString = "olifant"; lange telling = someString.chars (). filter (ch -> ch == 'e'). count (); assertEquals (2, count); lange count2 = someString.codePoints (). filter (ch -> ch == 'e'). count (); assertEquals (2, count2);

Dit is dus duidelijk een schonere en beter leesbare oplossing met behulp van de kernbibliotheek.

3. Externe bibliotheken gebruiken

Laten we nu eens kijken naar enkele oplossingen die gebruik maken van hulpprogramma's uit externe bibliotheken.

3.1. Gebruik makend van StringUtils

Over het algemeen is het altijd beter om een ​​bestaande oplossing te gebruiken in plaats van onze eigen uit te vinden. De commons.lang.StringUtils class biedt ons de countMatches () methode, die kan worden gebruikt voor het tellen van tekens of zelfs subtekenreeksen in een gegeven Draad.

Ten eerste moeten we de juiste afhankelijkheid opnemen:

 org.apache.commons commons-lang3 3.5 

We kunnen de nieuwste versie vinden op Maven Central.

Laten we nu gebruiken countMatches () om het aantal 'e'-tekens in de letterlijke tekenreeks' olifant 'te tellen:

int count = StringUtils.countMatches ("olifant", "e"); assertEquals (2, count);

3.2. Guava gebruiken

Guava kan ook nuttig zijn bij het tellen van tekens. We moeten de afhankelijkheid definiëren:

 com.google.guava guave 21.0 

We kunnen de nieuwste versie vinden op Maven Central.

Laten we eens kijken hoe Guava ons snel kan helpen bij het tellen van tekens:

int count = CharMatcher.is ('e'). countIn ("olifant"); assertEquals (2, count);

3.3. Met behulp van de lente

Het heeft natuurlijk geen zin om het Spring Framework aan uw project toe te voegen om alleen tekens te tellen. Als we het echter al in ons project hebben, hoeven we alleen de countOccurencesOf () methode:

int count = StringUtils.countOccurrencesOf ("olifant", "e"); assertEquals (2, count);

4. Conclusie

In deze korte tutorial hebben we ons gericht op verschillende manieren om tekens in de tekenreeks te tellen. Sommigen van hen zijn puur op Java ontworpen; sommige vereisten extra bibliotheken.

Onze aanbeveling is om reeds bestaande hulpprogramma's te gebruiken van StringUtils, Guave of lente. Als men er echter de voorkeur aan geeft alleen gewoon Java te gebruiken, biedt dit artikel enkele mogelijkheden om net zo goed te presteren met Java 8.

De volledige broncode voor deze voorbeelden is beschikbaar in dit GitHub-project.


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