【问题标题】:Test for English only A-Z upper case of a character仅测试英文字符的 A-Z 大写
【发布时间】:2014-11-07 15:27:38
【问题描述】:

我需要测试一个仅大写字母 A-Z 的字符。不是任何其他特殊的 unicode 或其他语言。

我正在阅读Character.isUpperCase 的文档。如果它是一个被认为是大写但在技术上不在 A-Z 之间的 unicode 字符,它似乎会通过。它似乎会传递除英语以外的其他语言的大写字符。

我只需要使用正则表达式还是我读错了Character.isUpperCase

谢谢

【问题讨论】:

  • 是的,最好使用正则表达式。
  • 不能用'A''Z'的字符码来判断字符是否介于两者之间吗?
  • 尝试使用 ASCII 码或正则表达式。
  • 我试图避免“重新发明”轮子。我希望 java 在不使用正则表达式或字符代码的情况下已经提供了这个功能。

标签: java uppercase


【解决方案1】:

从您链接的文档中:

许多其他 Unicode 字符也是大写的。

所以是的,使用 isUpperCase 将匹配 A-Z 以外的内容。 进行测试的一种方法是这样的。

boolean isUpperCaseEnglish(char c){
    return c >= 'A' && c <= 'Z';
}

【讨论】:

    【解决方案2】:

    isUpperCase 确实不保证字符在'A''Z' 之间。您可以使用正则表达式:

    String s = ...;
    Pattern p = Pattern.compile("[A-Z]*");
    Matcher m = p.matcher(s);
    boolean matches = m.matches();
    

    【讨论】:

    • 问题是关于只匹配一个字符。正则表达式不是只有“[A-Z]”吗? (但我认为正则表达式对于这个问题来说有点矫枉过正)
    【解决方案3】:

    Character.isUpperCase() 确实接受基于其他语言的内容。例如,Ω 将被视为大写。

    但您可以检查以确保它在AZ 之间:

    public static boolean isUpperCaseInEnglish(char c) {
         return (c >= 'A' && c <= 'Z');
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多