Guava CharMatcher

Guava CharMatcher

In diesem kurzen Tutorial werden wir die DienstprogrammklasseCharMatcherin Guava untersuchen.

1. Entfernen Sie Sonderzeichen vonString

Beginnen wir damit, alle Sonderzeichen ausString zu entfernen.

Im folgenden Beispiel entfernen wir alle Zeichen, die keine Ziffern oder Buchstaben sind, mitretainFrom():

@Test
public void whenRemoveSpecialCharacters_thenRemoved(){
    String input = "H*el.lo,}12";
    CharMatcher matcher = CharMatcher.JAVA_LETTER_OR_DIGIT;
    String result = matcher.retainFrom(input);

    assertEquals("Hello12", result);
}

2. Entfernen Sie Nicht-ASCII-Zeichen aus der Zeichenfolge

Wir können auchCharMatcher verwenden, um Nicht-ASCII-Zeichen ausString zu entfernen, wie im folgenden Beispiel:

@Test
public void whenRemoveNonASCIIChars_thenRemoved() {
    String input = "あhello₤";

    String result = CharMatcher.ASCII.retainFrom(input);
    assertEquals("hello", result);

    result = CharMatcher.inRange('0', 'z').retainFrom(input);
    assertEquals("hello", result);
}

3. Zeichen entfernen, die nicht inCharsetenthalten sind

Lassen Sie uns nun sehen, wie Sie Zeichen entfernen, die nicht zu einem bestimmtenCharsetgehören. Im folgenden Beispiel werden Zeichen entfernt, die nicht zu denCharset von "cp437" gehören:

@Test
public void whenRemoveCharsNotInCharset_thenRemoved() {
    Charset charset = Charset.forName("cp437");
    CharsetEncoder encoder = charset.newEncoder();

    Predicate inRange = new Predicate() {
        @Override
        public boolean apply(Character c) {
            return encoder.canEncode(c);
        }
    };

    String result = CharMatcher.forPredicate(inRange)
                               .retainFrom("helloは");
    assertEquals("hello", result);
}

Hinweis: Wir habenCharsetEncoder verwendet, umPredicate zu erstellen, die prüfen, ob die angegebenenCharacter in die angegebenenCharset codiert werden können.

4. ValidiereString

Weiter - sehen wir uns an, wie SieString mitCharMatcher validieren.

Wir könnenmatchesAllOf() verwenden, um zu überprüfen, ob alle Zeichen einer Bedingung entsprechen. Und wir könnenmatchesNoneOf() verwenden, um zu überprüfen, ob eine Bedingung für keines derString-Zeichen gilt.

Im folgenden Beispiel prüfen wir, ob unserString klein geschrieben ist, mindestens eine-Zeichen enthält und keine Ziffern enthält:

@Test
public void whenValidateString_thenValid(){
    String input = "hello";

    boolean result = CharMatcher.JAVA_LOWER_CASE.matchesAllOf(input);
    assertTrue(result);

    result = CharMatcher.is('e').matchesAnyOf(input);
    assertTrue(result);

    result = CharMatcher.JAVA_DIGIT.matchesNoneOf(input);
    assertTrue(result);
}

5. TrimString

Nun wollen wir sehen, wie einStringmitCharMatcher gekürzt wird.

Im folgenden Beispiel verwenden wirtrimLeading(),trimTrailing undtrimFrom(), um unsereString zu trimmen:

@Test
public void whenTrimString_thenTrimmed() {
    String input = "---hello,,,";

    String result = CharMatcher.is('-').trimLeadingFrom(input);
    assertEquals("hello,,,", result);

    result = CharMatcher.is(',').trimTrailingFrom(input);
    assertEquals("---hello", result);

    result = CharMatcher.anyOf("-,").trimFrom(input);
    assertEquals("hello", result);
}

6. Reduzieren Sie aString

Weiter - sehen wir uns an, wie SieString mitCharMatcher reduzieren.

Im folgenden Beispiel verwenden wircollapseFrom(), um aufeinanderfolgende Leerzeichen durch '' zu ersetzen:

@Test
public void whenCollapseFromString_thenCollapsed() {
    String input = "       hel    lo      ";

    String result = CharMatcher.is(' ').collapseFrom(input, '-');
    assertEquals("-hel-lo-", result);

    result = CharMatcher.is(' ').trimAndCollapseFrom(input, '-');
    assertEquals("hel-lo", result);
}

7. Ersetzen Sie vonString

Wir könnenCharMatcher verwenden, um bestimmte Zeichen vonString zu ersetzen, wie im folgenden Beispiel:

@Test
public void whenReplaceFromString_thenReplaced() {
    String input = "apple-banana.";

    String result = CharMatcher.anyOf("-.").replaceFrom(input, '!');
    assertEquals("apple!banana!", result);

    result = CharMatcher.is('-').replaceFrom(input, " and ");
    assertEquals("apple and banana.", result);
}

8. Anzahl der Zeichenvorkommen

Zum Schluss sehen wir uns an, wie das Auftreten von Zeichen mitCharMatcher gezählt wird.

Im folgenden Beispiel zählen wir die Kommas und Zeichen zwischen 'a': 'h':

@Test
public void whenCountCharInString_thenCorrect() {
    String input = "a, c, z, 1, 2";

    int result = CharMatcher.is(',').countIn(input);
    assertEquals(4, result);

    result = CharMatcher.inRange('a', 'h').countIn(input);
    assertEquals(2, result);
}

9. Fazit

In diesem Artikel haben wir einige der nützlicheren APIs und Beispiele für die Verwendung von Guava for Strings in der Praxis veranschaulicht.