查詢和計算字串中的字元
為了幫助你查詢和計算字串中的字元,CharMatcher
提供了以下方法:
-
int indexIn(CharSequence sequence)
返回與CharMatcher
例項匹配的第一個字元的索引。如果沒有字元匹配,則返回 -1。 -
int indexIn(CharSequence sequence, int start)
返回與CharMatcher
例項匹配的指定起始位置後的第一個字元的索引。如果沒有字元匹配,則返回 -1。 -
int lastIndexIn(CharSequence sequence)
返回與CharMatcher
例項匹配的最後一個字元的索引。如果沒有字元匹配,則返回 -1。 -
int countIn(CharSequence sequence)
返回與CharMatcher
例項匹配的字元數。
使用這些方法,這是一個名為 NonAsciiFinder
的簡單控制檯應用程式,它將字串作為輸入引數。首先,它列印出字串中包含的非 ASCII 字元的總數。隨後,它列印出它遇到的每個非 ASCII 字元的 Unicode 表示。這是程式碼:
import com.google.common.base.CharMatcher;
public class NonAsciiFinder {
private static final CharMatcher NON_ASCII = CharMatcher.ascii().negate();
public static void main(String[] args) {
String input = args[0];
int nonAsciiCount = NON_ASCII.countIn(input);
echo("Non-ASCII characters found: %d", nonAsciiCount);
if (nonAsciiCount > 0) {
int position = -1;
char character = 0;
while (position != NON_ASCII.lastIndexIn(input)) {
position = NON_ASCII.indexIn(input, position + 1);
character = input.charAt(position);
echo("%s => \\u%04x", character, (int) character);
}
}
}
private static void echo(String s, Object... args) {
System.out.println(String.format(s, args));
}
}
請注意,在上面的示例中,你可以通過呼叫 negate
方法簡單地反轉 CharMatcher
。類似地,下面的 CharMatcher
匹配所有雙寬字元,並且通過否定預定義的 CharMatcher
來建立單寬字元。
final static CharMatcher DOUBLE_WIDTH = CharMatcher.singleWidth().negate();
執行 NonAsciiFinder
應用程式會產生以下輸出:
$> java NonAsciiFinder "Maître Corbeau, sur un arbre perché"
Non-ASCII characters found: 2
î => \u00ee
é => \u00e9
$> java NonAsciiFinder "古池や蛙飛び込む水の音"
NonASCII characters found: 11
古 => \u53e4
池 => \u6c60
や => \u3084
蛙 => \u86d9
飛 => \u98db
び => \u3073
込 => \u8fbc
む => \u3080
水 => \u6c34
の => \u306e
音 => \u97f3