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;
            }
        }
    
        /**
         * 验证字符串内容是否包含下列非法字符
* `~!#%^&*=+\\|{};:'\",<>/?○●★☆☉♀♂※¤╬の〆 * * @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端不进行中文处理,读取不出来,才搞了这么一出(为什么引用别人的转自己的,防止的就是别人不给自己用,还有就是找起来麻烦,于是转了这么一篇博文,侠客请勿喷)

你可能感兴趣的:(java,web)