如何检查一个字符串是否只包含 ASCII?

新手上路,请多包涵

调用 Character.isLetter(c) 返回 true 如果字符是字母。但是有没有办法快速找到 String 是否只包含 ASCII 的基本字符?

原文由 TambourineMan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

Guava 19.0 开始,您可以使用:

 boolean isAscii = CharMatcher.ascii().matchesAllOf(someString);

这使用 matchesAllOf(someString) 依赖于工厂方法 ascii() 的方法,而不是现在已弃用的 ASCII 单例。

这里的 ASCII 包括所有 ASCII 字符, 包括 低于 0x20 (空格)的不可打印字符,例如制表符、换行符/回车以及 BEL 代码 0x07DEL 代码 0x7F

此代码错误地使用字符而不是代码点,即使早期版本的注释中指示了代码点。幸运的是,创建值为 U+010000 或以上的代码点所需的字符使用两个具有 ASCII 范围之外的值的代理字符。所以该方法仍然可以成功测试 ASCII,即使是包含表情符号的字符串。

对于没有 ascii() 方法的早期 Guava 版本,您可以这样写:

 boolean isAscii = CharMatcher.ASCII.matchesAllOf(someString);

原文由 ColinD 发布,翻译遵循 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
      */
  }
}

检测字符串中的非 ASCII 字符

原文由 RealHowTo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题