如何检查字符串是否仅包含ASCII?
2022-08-31 08:09:23
如果字符是字母,则返回调用。但是有没有办法快速找到 是否只包含 ASCII 的基本字符?Character.isLetter(c)
true
String
如果字符是字母,则返回调用。但是有没有办法快速找到 是否只包含 ASCII 的基本字符?Character.isLetter(c)
true
String
从番石榴19.0开始,您可以使用:
boolean isAscii = CharMatcher.ascii().matchesAllOf(someString);
这使用 matchAllOf(someString)
方法,该方法依赖于工厂方法 ascii()
而不是现在已弃用的单例。ASCII
在这里,ASCII包括所有ASCII字符,包括小于(空格)的不可打印字符,例如制表符,换行符/返回,但也包括代码和代码。0x20
BEL
0x07
DEL
0x7F
此代码错误地使用字符而不是代码点,即使早期版本的注释中指示了代码点也是如此。幸运的是,创建值为或超过值的代码点所需的字符使用两个值超出 ASCII 范围的代理项字符。因此,该方法仍然可以成功测试ASCII,即使对于包含表情符号的字符串也是如此。U+010000
对于没有该方法的早期番石榴版本,您可以编写:ascii()
boolean isAscii = CharMatcher.ASCII.matchesAllOf(someString);
你可以用java.nio.charset.Charset来做到这一点。
import java.nio.charset.Charset;
public class StringUtils {
public static boolean isPureAscii(String v) {
return Charset.forName("US-ASCII").newEncoder().canEncode(v);
// or "ISO-8859-1" for ISO Latin 1
// or StandardCharsets.US_ASCII with JDK1.7+
}
public static void main (String args[])
throws Exception {
String test = "Réal";
System.out.println(test + " isPureAscii() : " + StringUtils.isPureAscii(test));
test = "Real";
System.out.println(test + " isPureAscii() : " + StringUtils.isPureAscii(test));
/*
* output :
* Réal isPureAscii() : false
* Real isPureAscii() : true
*/
}
}