Inleiding tot Apache Commons-tekst

1. Overzicht

Simpel gezegd, de Apache Commons-tekstbibliotheek bevat een aantal handige hulpprogramma's om mee te werken Snaren, verder dan wat de kern Java biedt.

In deze korte inleiding zullen we zien wat Apache Commons Text is en waarvoor het wordt gebruikt, evenals enkele praktische voorbeelden van het gebruik van de bibliotheek.

2. Maven Afhankelijkheid

Laten we beginnen met het toevoegen van de volgende Maven-afhankelijkheid aan onze pom.xml:

 org.apache.commons commons-text 1.1 

U kunt de laatste versie van de bibliotheek vinden in de Maven Central Repository.

3. Overzicht

Het root-pakket org.apache.commons.text is onderverdeeld in verschillende subpakketten:

  • org.apache.commons.text.diff - verschilt tussen Snaren
  • org.apache.commons.text.similarity - overeenkomsten en afstanden tussen Snaren
  • org.apache.commons.text.translate - vertalen van tekst

Laten we eens kijken waarvoor elk pakket kan worden gebruikt - in meer detail.

3. Omgaan met tekst

De org.apache.commons.text pakket bevat meerdere tools om mee te werken Snaren.

Bijvoorbeeld, WordUtils heeft API's die de eerste letter van elk woord in een Draad, het omwisselen van de zaak van een Draad, en controleren of a Draad bevat alle woorden in een gegeven array.

Laten we eens kijken hoe we de eerste letter van elk woord in een hoofdletter kunnen schrijven Draad:

@Test public void whenCapitalized_thenCorrect () {String toBeCapitalized = "in hoofdletters!"; String resultaat = WordUtils.capitalize (toBeCapitalized); assertEquals ("To Be Capitalized!", resultaat); }

Hier is hoe we kunnen controleren of een string alle woorden in een array bevat:

@Test openbare leegte whenContainsWords_thenCorrect () {boolean containsWords = WordUtils .containsAllWords ("String om te zoeken", "naar", "zoeken"); assertTrue (bevat woorden); }

StrSubstitutor biedt een gemakkelijke manier om te bouwen Snaren van sjablonen:

@Test openbare ongeldige whenSubstituted_thenCorrect () {Map substitutes = new HashMap (); substitutes.put ("naam", "Jan"); substitutes.put ("college", "University of Stanford"); String templateString = "Mijn naam is $ {name} en ik ben een student aan $ {college}."; StrSubstitutor sub = nieuwe StrSubstitutor (substituten); String resultaat = sub.replace (templateString); assertEquals ("Mijn naam is John en ik ben een student aan de Universiteit van Stanford.", resultaat); }

StrBuilder is een alternatief voor Java.lang.StringBuilder. Het biedt een aantal nieuwe functies die niet worden geleverd door StringBuilder.

We kunnen bijvoorbeeld alle exemplaren van een Draad in een andere Draad of wis een Draad zonder een nieuw object aan zijn referentie toe te wijzen.

Hier is een snel voorbeeld om een ​​deel van een Draad:

@Test public void whenReplaced_thenCorrect () {StrBuilder strBuilder = nieuwe StrBuilder ("voorbeeld StrBuilder!"); strBuilder.replaceAll ("voorbeeld", "nieuw"); assertEquals (nieuwe StrBuilder ("nieuwe StrBuilder!"), strBuilder); }

Om een Draad, we kunnen dat eenvoudig doen door de Doorzichtig() methode op de bouwer:

strBuilder.clear ();

4. Berekening van het verschil tussen Snaren

Het pakket org.apache.commons.text.diff implementeert Myers-algoritme voor het berekenen van verschillen tussen twee Snaren.

Het verschil tussen twee Snaren wordt bepaald door een reeks wijzigingen die er een kunnen converteren Draad naar een ander.

Er zijn drie soorten opdrachten die kunnen worden gebruikt om een Draad naar een ander - InsertCommand, KeepCommand, en DeleteCommand.

Een EditScript object bevat het script dat moet worden uitgevoerd om een Draad naar een ander. Laten we het aantal enkele tekenwijzigingen berekenen dat moet worden aangebracht om een Draad naar een ander:

@Test public void whenEditScript_thenCorrect () {StringsComparator cmp = new StringsComparator ("ABCFGH", "BCDEFG"); EditScript-script = cmp.getScript (); int mod = script.getModifications (); assertEquals (4, mod); }

5. Overeenkomsten en afstanden tussen Snaren

De org.apache.commons.text.similarity pakket bevat algoritmen die handig zijn voor het vinden van overeenkomsten en afstanden tussen Snaren.

Bijvoorbeeld, LongestCommonSubsequence kan worden gebruikt om het aantal gemeenschappelijke tekens in twee te vinden Snaren:

@Test openbare leegte whenCompare_thenCorrect () {LongestCommonSubsequence lcs = nieuwe LongestCommonSubsequence (); int countLcs = lcs.apply ("New York", "New Hampshire"); assertEquals (5, countLcs); }

Evenzo LongestCommonSubsequenceDistance kan worden gebruikt om het aantal verschillende karakters in twee te vinden Snaren:

@Test openbare leegte whenCalculateDistance_thenCorrect () {LongestCommonSubsequenceDistance lcsd = nieuwe LongestCommonSubsequenceDistance (); int countLcsd = lcsd.apply ("New York", "New Hampshire"); assertEquals (11, countLcsd); }

6. Tekstvertaling

De org.apache.text.translate pakket is in eerste instantie gemaakt om ons in staat te stellen de regels van StringEscapeUtils.

Het pakket heeft een reeks klassen die verantwoordelijk zijn voor het vertalen van tekst naar enkele van de verschillende tekencoderingsmodellen, zoals Unicode en Numeric Character Reference. We kunnen ook onze eigen aangepaste routines voor vertaling maken.

Laten we eens kijken hoe we een Draad naar zijn equivalente Unicode-tekst:

@Test openbare leegte whenTranslate_thenCorrect () {UnicodeEscaper ue = UnicodeEscaper.above (0); String resultaat = ue.translate ("ABCD"); assertEquals ("\ u0041 \ u0042 \ u0043 \ u0044", resultaat); }

Hier geven we de index door van het teken waarvan we de vertaling willen starten naar het bovenstaande() methode.

LookupTranslator stelt ons in staat om onze eigen opzoektabel te definiëren waarin elk teken een overeenkomstige waarde kan hebben, en we kunnen elke tekst naar het overeenkomstige equivalent vertalen.

7. Conclusie

In deze korte tutorial hebben we een overzicht gezien van waar Apache Commons Text over gaat en enkele van de gemeenschappelijke functies.

De codevoorbeelden zijn te vinden op GitHub.