來源自 這裡
Preface:
Java判斷一個字符串是否有中文一般情況是利用Unicode編碼 (CJK統一漢字的編碼區間:0x4e00–0x9fbb) 的正則來做判斷,但是其實這個區間來判斷中文不是非常精確,因為有些中文的標點符號比如:,。等等是不能識別的. 底下介紹幾個方法並做簡單測試.
CharUtil 範例:
這邊將方法撰寫在 CharUtil 上的靜態方法:
- CharUtil.java
測試代碼:
接著底下是測試代碼:
執行結果:
Preface:
Java判斷一個字符串是否有中文一般情況是利用Unicode編碼 (CJK統一漢字的編碼區間:0x4e00–0x9fbb) 的正則來做判斷,但是其實這個區間來判斷中文不是非常精確,因為有些中文的標點符號比如:,。等等是不能識別的. 底下介紹幾個方法並做簡單測試.
CharUtil 範例:
這邊將方法撰寫在 CharUtil 上的靜態方法:
- CharUtil.java
- public class CharUtil {
- // 根据Unicode编码完美的判断中文汉字和符号
- public static boolean isChinese(char c) {
- Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
- if ( ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
- || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
- //|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
- //|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
- //|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
- //|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
- )
- //|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION)
- {
- return true;
- }
- return false;
- }
- // 完整的判断中文汉字和符号
- public static boolean isChinese(String strName) {
- char[] ch = strName.toCharArray();
- for (int i = 0; i < ch.length; i++) {
- char c = ch[i];
- if (isChinese(c)) {
- return true;
- }
- }
- return false;
- }
- // 只能判断部分CJK字符(CJK统一汉字)
- public static boolean isChineseByREG(String str) {
- if (str == null) {
- return false;
- }
- Pattern pattern = Pattern.compile("[\\u4E00-\\u9FBF]+");
- return pattern.matcher(str.trim()).find();
- }
- // 只能判断部分CJK字符(CJK统一汉字)
- public static boolean isChineseByName(String str) {
- if (str == null) {
- return false;
- }
- // 大小写不同:\\p 表示包含,\\P 表示不包含
- // \\p{Cn} 的意思为 Unicode 中未被定义字符的编码,\\P{Cn} 就表示 Unicode中已经被定义字符的编码
- String reg = "\\p{InCJK Unified Ideographs}&&\\P{Cn}";
- Pattern pattern = Pattern.compile(reg);
- return pattern.matcher(str.trim()).find();
- }
- }
接著底下是測試代碼:
- public static void main(String[] args) {
- String[] strArr = new String[] { "www.micmiu.com",
- "!@#$%^&*()_+{}[]|\"'?/:;<>,.",
- "!¥……()——:;“”‘’《》,。?、",
- "中文不要啊",
- "やめて",
- "韩佳人",
- "한가인" };
- for (String str : strArr) {
- System.out.println("=========== 測試字符字串: " + str);
- System.out.println("正則判斷: " + isChineseByREG(str) + ", "
- + isChineseByName(str));
- System.out.println("Unicode 判斷結果:" + isChinese(str));
- System.out.println("詳細判斷列表:");
- char[] ch = str.toCharArray();
- for (int i = 0; i < ch.length; i++) {
- char c = ch[i];
- System.out.println(c + " : " + (isChinese(c) ? "是" : "否"));
- }
- }
- }
推!
回覆刪除