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.