java判斷字元是否為中文亂碼的方法
阿新 • • 發佈:2018-12-31
中文亂碼在專案中是經常會遇到的情況。當我們通過設定request和response字符集,但是還是出現中文亂碼的時候,今天給介紹一種通過java方法實現判斷string是否為亂碼的方法。
/** * 判斷字串是否是亂碼 * * @param strName 字串 * @return 是否是亂碼 */ public static boolean isMessyCode(String strName) { Pattern p = Pattern.compile("\\s*|t*|r*|n*"); Matcher m = p.matcher(strName); String after = m.replaceAll("");//去重為空的情況 String temp = after.replaceAll("\\p{P}", ""); char[] ch = temp.trim().toCharArray(); float chLength = ch.length; float count = 0; for (int i = 0; i < ch.length; i++) { char c = ch[i]; if (!Character.isLetterOrDigit(c)) { if (!isChinese(c)) { count = count + 1; } } } float result = count / chLength; if (result > 0.4) { return true; } else { return false; } } /** * 判斷字元是否是中文 * * @param c 字元 * @return 是否是中文 */ 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.GENERAL_PUNCTUATION || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) { return true; } return false; }
定義呼叫:
public static void main(String[] args) { // TODO Auto-generated method stub /*List<String> list = new ArrayList<String>(); Map<List<String>, String> map = new HashMap<>();*/ String messcode = "ss201888asdf;#????"; System.out.println(">>>>>>>>>>:"+isMessyCode(messcode)); }
輸出結果:
>>>>>>>>>>:false