查找和计算字符串中的字符
为了帮助你查找和计算字符串中的字符,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