如何检测中文文本是否包含简体字或繁体字?[复制]

How to detect if Chinese text contains simplified or traditional characters? [duplicate]

提问人:ccpizza 提问时间:8/9/2023 最后编辑:ccpizza 更新时间:8/10/2023 访问量:226

问:

在 Java 中,检测中文 Unicode 字符串是否包含中文简体字或繁体字的可靠方法是什么?假设在默认情况下,简化范围和传统范围通用的字符将被视为简化字符。

理想情况下,应按特定的 Unicode 字符范围检查正则表达式匹配。这些范围是否被记录和定义,这种方法是否可靠?

更新

相关问题:

总结
  • 为了检测汉字(简体字和繁体字)的存在,可以使用正则表达式".*[\\u4E00-\\u9FA5]+.*"
  • 为了进一步将汉字具体识别为繁体/简体,可以使用从 cedict 中提取的列表。去除公共超集的独占子集可用于获得所需的微分,如样本要点所示*
Java CJK 语言环境 体中文

评论

0赞 Sweeper 8/9/2023
可能的重复
0赞 ccpizza 8/9/2023
@Sweeper:在发布之前,我已经查看了所有重复项;它们不包含直接的答案,而是“在 Unihan 表中查找它们”。这个问题是如何通过使用具有特定已知范围的字符类的正则表达式来实现它
1赞 Sweeper 8/9/2023
好吧,没有直接的答案。查找简化字符列表是查找包含简化字符的范围的必要且充分的步骤,不是吗?找到范围后,您基本上找到了整个列表。找到列表后,您也知道它们在哪些范围内。

答:

0赞 M. Usman 8/9/2023 #1
public class ChineseCharacterDetector {
    public static boolean containsSimplifiedChinese(String input) {
        for (char c : input.toCharArray()) {
            if (isSimplifiedChinese(c)) {
                return true;
            }
        }
        return false;
    }

    public static boolean containsTraditionalChinese(String input) {
        for (char c : input.toCharArray()) {
            if (isTraditionalChinese(c)) {
                return true;
            }
        }
        return false;
    }

    private static boolean isSimplifiedChinese(char c) {
        // Common simplified Chinese character range
        return (c >= '\u4E00' && c <= '\u9FFF');
    }

    private static boolean isTraditionalChinese(char c) {
        // Common traditional Chinese character ranges
        return (c >= '\u4E00' && c <= '\u9FFF') || // Common characters
               (c >= '\u3400' && c <= '\u4DBF') || // Extended-A
               (c >= '\u20000' && c <= '\u2A6DF'); // Extended-B
    }

    public static void main(String[] args) {
        String input = "你好,世界!Hello, 世界!";
        
        if (containsSimplifiedChinese(input)) {
            System.out.println("Contains Simplified Chinese characters");
        } else if (containsTraditionalChinese(input)) {
            System.out.println("Contains Traditional Chinese characters");
        } else {
            System.out.println("Contains neither Simplified nor Traditional Chinese characters");
        }
    }
}

isSimplifiedChinese 函数考虑常见简体中文范围中的字符,而 isTraditionalChinese 函数考虑典型繁体中文范围中的字符以及某些扩展范围。函数 containsSimplifiedChinese 和 containsTraditionalChinese 循环访问输入文本,查找指定范围内的字符。