1. 程式人生 > >java漢字轉拼音或效驗漢字是否存在(過濾)

java漢字轉拼音或效驗漢字是否存在(過濾)

# 漢字控制
## 漢字轉拼音
    引入jar:pinyin4j.jar
import net.sourceforge.pinyin4j.PinyinHelper;
    import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
    import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
    import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
    import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
    import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
    
    /**
     * 漢字轉拼音的工具類
     * Created by Love丶TG on 2018/10/28 13:56.
     */
    public class PinYinUtil {
        /**
         * 將字串中的中文轉化為拼音,其他字元不變
         *
         * @param inputString
         * @return
         */
        public static String getPingYin(String inputString) {
            HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
            format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
            format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            format.setVCharType(HanyuPinyinVCharType.WITH_V);
    
            char[] input = inputString.trim().toCharArray();
            String output = "";
    
            try {
                for (int i = 0; i < input.length; i++) {
                    if (java.lang.Character.toString(input[i]).matches("[\\u4E00-\\u9FA5]+")) {
                        String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format);
                        output += temp[0];
                    } else
                        output += java.lang.Character.toString(input[i]);
                }
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
            return output;
        }
    
        /**
         * 獲取漢字串拼音首字母,英文字元不變
         *
         * @param chinese 漢字串
         * @return 漢語拼音首字母
         */
        public static String getFirstSpell(String chinese) {
            StringBuffer pybf = new StringBuffer();
            char[] arr = chinese.toCharArray();
            HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
            defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
            defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] > 128) {
                    try {
                        String[] temp = PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat);
                        if (temp != null) {
                            pybf.append(temp[0].charAt(0));
                        }
                    } catch (BadHanyuPinyinOutputFormatCombination e) {
                        e.printStackTrace();
                    }
                } else {
                    pybf.append(arr[i]);
                }
            }
            return pybf.toString().replaceAll("\\W", "").trim();
        }
    
        /**
         * 獲取漢字串拼音,英文字元不變
         *
         * @param chinese 漢字串
         * @return 漢語拼音
         */
        public static String getFullSpell(String chinese) {
            StringBuffer pybf = new StringBuffer();
            char[] arr = chinese.toCharArray();
            HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
            defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
            defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] > 128) {
                    try {
                        pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]);
                    } catch (BadHanyuPinyinOutputFormatCombination e) {
                        e.printStackTrace();
                    }
                } else {
                    pybf.append(arr[i]);
                }
            }
            return pybf.toString();
        }
    }
## 效驗漢字是否存在(過濾)
import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * 字串判斷是否包含中文或是否過濾中文的工具類
     * Created by Love丶TG on 2018/10/28 13:53.
     */
    public class IsContainChineseUtils {
    
        /**
         * 判斷字串中是否包含中文
         *
         * @param str 待校驗字串
         * @return 是否為中文
         * @warn 不能校驗是否為中文標點符號
         */
        public static boolean isContainChinese(String str) {
            Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
            Matcher m = p.matcher(str);
            if (m.find()) {
                return true;
            }
            return false;
        }
    
        /**
         * 過濾掉中文
         *
         * @param str 待過濾中文的字串
         * @return 過濾掉中文後字串
         */
        public static String filterChinese(String str) {
            // 用於返回結果
            String result = str;
            boolean flag = isContainChinese(str);
            if (flag) {// 包含中文
                // 用於拼接過濾中文後的字元
                StringBuffer sb = new StringBuffer();
                // 用於校驗是否為中文
                boolean flag2 = false;
                // 用於臨時儲存單字元
                char chinese = 0;
                // 5.去除掉檔名中的中文
                // 將字串轉換成char[]
                char[] charArray = str.toCharArray();
                // 過濾到中文及中文字元
                for (int i = 0; i < charArray.length; i++) {
                    chinese = charArray[i];
                    flag2 = isChinese(chinese);
                    if (!flag2) {// 不是中日韓文字及標點符號
                        sb.append(chinese);
                    }
                }
                result = sb.toString();
            }
            return result;
        }
    
    
        /**
         * 校驗一個字元是否是漢字
         *
         * @param c 被校驗的字元
         * @return true代表是漢字
         */
        public static boolean isChineseChar(char c) {
            try {
                return String.valueOf(c).getBytes("UTF-8").length > 1;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
    
        /**
         * 驗證字串內容是否包含下列非法字元<br>
         * `~!#%^&*=+\\|{};:'\",<>/?○●★☆☉♀♂※¤╬の〆
         *
         * @param content 字串內容
         * @return 't'代表不包含非法字元,otherwise代表包含非法字元。
         */
        public static char validateLegalString(String content) {
            String illegal = "`~!#%^&*=+\\|{};:'\",<>/?○●★☆☉♀♂※¤╬の〆";
            char isLegalChar = 't';
            L1:
            for (int i = 0; i < content.length(); i++) {
                for (int j = 0; j < illegal.length(); j++) {
                    if (content.charAt(i) == illegal.charAt(j)) {
                        isLegalChar = content.charAt(i);
                        break L1;
                    }
                }
            }
            return isLegalChar;
        }
    
        /**
         * 驗證是否是漢字或者0-9、a-z、A-Z
         *
         * @param c 被驗證的char
         * @return true代表符合條件
         */
        public static boolean isRightChar(char c) {
            return isChinese(c) || isWord(c);
        }
    
        /**
         * 校驗某個字元是否是a-z、A-Z、_、0-9
         *
         * @param c 被校驗的字元
         * @return true代表符合條件
         */
        public static boolean isWord(char c) {
            String regEx = "[\\w]";
            Pattern p = Pattern.compile(regEx);
            Matcher m = p.matcher("" + c);
            return m.matches();
        }
    
        /**
         * 判定輸入的是否是漢字
         *
         * @param c 被校驗的字元
         * @return true代表是漢字
         */
        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;
        }
    
        /**
         * 校驗String是否全是中文
         *
         * @param name 被校驗的字串
         * @return true代表全是漢字
         */
        public static boolean checkNameChese(String name) {
            boolean res = true;
            char[] cTemp = name.toCharArray();
            for (int i = 0; i < name.length(); i++) {
                if (!isChinese(cTemp[i])) {
                    res = false;
                    break;
                }
            }
            return res;
        }
    }

注:主要是服務端上傳中文圖片等檔案時,IOS端不進行中文處理,讀取不出來,才搞了這麼一出(為什麼引用別人的轉自己的,防止的就是別人不給自己用,還有就是找起來麻煩,於是轉了這麼一篇博文,俠客請勿噴)