调用 Character.isLetter(c)
返回 true
如果字符是字母。但是有没有办法快速找到 String
是否只包含 ASCII 的基本字符?
原文由 TambourineMan 发布,翻译遵循 CC BY-SA 4.0 许可协议
调用 Character.isLetter(c)
返回 true
如果字符是字母。但是有没有办法快速找到 String
是否只包含 ASCII 的基本字符?
原文由 TambourineMan 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用 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
*/
}
}
原文由 RealHowTo 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
从 Guava 19.0 开始,您可以使用:
这使用
matchesAllOf(someString)
依赖于工厂方法ascii()
的方法,而不是现在已弃用的ASCII
单例。这里的 ASCII 包括所有 ASCII 字符, 包括 低于
0x20
(空格)的不可打印字符,例如制表符、换行符/回车以及BEL
代码0x07
和DEL
代码0x7F
。此代码错误地使用字符而不是代码点,即使早期版本的注释中指示了代码点。幸运的是,创建值为
U+010000
或以上的代码点所需的字符使用两个具有 ASCII 范围之外的值的代理字符。所以该方法仍然可以成功测试 ASCII,即使是包含表情符号的字符串。对于没有
ascii()
方法的早期 Guava 版本,您可以这样写: