在Java中判断字符串或字符是否为中文,可以使用以下几种方法:

1. 使用Unicode范围判断

public static boolean isChinese(char c) {
    Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
    return ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
        || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
        || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
        || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
        || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
        || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS;
}

public static boolean isChinese(String str) {
    if (str == null || str.length() == 0) {
        return false;
    }
    for (int i = 0; i < str.length(); i++) {
        if (!isChinese(str.charAt(i))) {
            return false;
        }
    }
    return true;
}

2. 使用正则表达式判断

public static boolean isChinese(String str) {
    String regex = "[\\u4e00-\\u9fff]+";
    return str.matches(regex);
}

// 或者更完整的中文字符检测
public static boolean containsChinese(String str) {
    String regex = ".*[\\u4e00-\\u9fff\\uf900-\\ufa2d]+.*";
    return str.matches(regex);
}

3. 使用Character类的方法

public static boolean isChinese(char c) {
    return Character.isIdeographic(c);
}

public static boolean isChineseBlock(char c) {
    return (c >= 0x4e00 && c <= 0x9fff) || 
           (c >= 0xf900 && c <= 0xfaff);
}

4. 实际应用示例

public class ChineseDetector {
    
    // 检查字符串是否全为中文
    public static boolean isAllChinese(String str) {
        if (str == null || str.trim().isEmpty()) {
            return false;
        }
        return str.matches("[\\u4e00-\\u9fff\\uf900-\\ufa2d]+");
    }
    
    // 检查字符串是否包含中文
    public static boolean containsChinese(String str) {
        if (str == null || str.isEmpty()) {
            return false;
        }
        for (char c : str.toCharArray()) {
            if (isChineseChar(c)) {
                return true;
            }
        }
        return false;
    }
    
    // 判断单个字符是否为中文
    private static boolean isChineseChar(char c) {
        return (c >= 0x4e00 && c <= 0x9fff) || 
               (c >= 0xf900 && c <= 0xfaff);
    }
}

推荐使用第1种或第4种方法,因为它们能够更准确地识别各种中文字符块,包括扩展区域的汉字。

注意:以上内容由AI大模型生成,注意识别!

扩展、[\u4e00-\u9fa5] 和 [\u4E00-\u9FFF] 的汉字范围由什么区别?

Unicode汉字范围区别

\u4e00-\u9fa5 范围

  • 起始字符: (U+4E00)
  • 结束字符: (U+9FA5)
  • 字符数量: 20902个字符
  • 标准来源: 基于早期Unicode标准定义的CJK统一汉字范围

\u4E00-\u9FFF 范围

  • 起始字符: (U+4E00)
  • 结束字符: 鿿 (U+9FFF)
  • 字符数量: 24576个字符
  • 标准扩展: 包含了更多现代Unicode标准中定义的汉字

主要差异

  1. 范围大小

    • [\u4E00-\u9FFF][\u4e00-\u9fa5] 多出约3674个字符
  2. 字符覆盖

    • [\u4e00-\u9fa5] 是传统CJK汉字的核心区域
    • [\u4E00-\u9FFF] 包含了扩展的汉字字符,如少数民族文字、古文字等
  3. 实际应用

    • 现代项目建议使用 [\u4E00-\u9FFF] 以获得更完整的汉字支持
    • 两者都可用于中文字符检测,但后者覆盖面更广
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐