字符串的一些判断
2015-11-18 13:12
281 查看
* 判断为标点符号(去除乱码、字母、数字、中文的其他所有) * * @param c * 字符 * @return 是否为标点符号 */ public static boolean isPunctuation(char c) { return haveMessyCode(String.valueOf(c)) ? false : isChinese(c) ? false : isLetterOrDigit(c) ? false : true; } /** * 判断一个char是否为中文。 * * @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; } /** * 判断为数字或者字母 * * @param c * 字符 * @return 是否为数字或者字母 */ public static boolean isLetterOrDigit(char c) { return Character.isLetterOrDigit(c); } /** * 判断字符串是否是乱码 * * @param strName * 字符串 * @return 是否是乱码 */ public static boolean haveMessyCode(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 str * 原型字符串 * @param repeat * 重复次数 * @return 新建的字符串 */ public static String build(String str, int repeat) { StringBuffer buf = new StringBuffer(); for (int i = 0; i < repeat; i++) { buf.append(str); } return buf.toString(); } /** * 校验字符串 * * @param str * @return */ public static boolean checkStr(String str) { boolean flag = true; int length = Strings.nullToEmpty(str).trim().length(); for (int i = 0; i < length; i++) { char charAt = str.charAt(i); if (filterStr(charAt) == true) { continue; } if (checkType(charAt).toString().equals(CharType.OTHER.toString())) { flag = false; break; } } return flag; } public static boolean filterStr(char c) { String filter = "$ \n…… 。`^><》《“”+=——~【】|"; boolean flag = false; int length = filter.length(); for (int i = 0; i < length; i++) { if (filter.charAt(i) == c) { flag = true; } } return flag; } enum CharType { DELIMITER, // 非字母截止字符,例如,.)( 等等 ( 包含U0000-U0080) NUM, // 2字节数字1234 LETTER, // gb2312中的,例如:ABC,2字节字符同时包含 1字节能表示的 basic latin and latin-1 OTHER, // 其他字符 CHINESE; // 中文字 } /** * 判断输入char类型变量的字符类型 * * @param c * char类型变量 * @return CharType 字符类型 */ private static CharType checkType(char c) { CharType ct = null; if (haveMessyCode(String.valueOf(c))) { ct = CharType.OTHER; return ct; } // 中文,编码区间0x4e00-0x9fbb if ((c >= 0x4e00) && (c <= 0x9fbb)) { ct = CharType.CHINESE; // Halfwidth and Fullwidth Forms, 编码区间0xff00-0xffef } else if ((c >= 0xff00) && (c <= 0xffef)) { // 2字节英文字 if (((c >= 0xff21) && (c <= 0xff3a)) || ((c >= 0xff41) && (c <= 0xff5a))) { ct = CharType.LETTER; // 2字节数字 } else if ((c >= 0xff10) && (c <= 0xff19)) { ct = CharType.NUM; } else { ct = CharType.DELIMITER; } } // basic latin,编码区间 0000-007f else if ((c >= 0x0021) && (c <= 0x007e)) { // 1字节数字 if ((c >= 0x0030) && (c <= 0x0039)) { ct = CharType.NUM; } // 1字节字符 else if (((c >= 0x0041) && (c <= 0x005a)) || ((c >= 0x0061) && (c <= 0x007a))) { ct = CharType.LETTER; } // 其他字符,可以认为是标点符号 else { ct = CharType.DELIMITER; } } // latin-1,编码区间0080-00ff else if ((c >= 0x00a1) && (c <= 0x00ff)) { if ((c >= 0x00c0) && (c <= 0x00ff)) { ct = CharType.LETTER; } else ct = CharType.DELIMITER; } else { ct = CharType.OTHER; } return ct; } /** * 校验手机端字符串 * * @param str * @param length * @param jsonResult * @return */ public static JsonResult checkStr(String str, int length, JsonResult jsonResult, String message) { jsonResult = new JsonResult(true); if (null != str) { if (!StringUtil.checkStr(str)) { jsonResult = new JsonResult(false, message + AppConstants.INPUT_RULE_MSG); return jsonResult; } if (str.length() > length) { jsonResult = new JsonResult(false, message + "最大长度不能超过" + length); return jsonResult; } } return jsonResult; } public static JsonResult checkStr(String str, int length, JsonResult jsonResult) { return checkStr(str, length, jsonResult, ""); } /** * 校验手机端特殊字符进行base64转码 * * @param str * @return * @throws UnsupportedEncodingException * @throws Exception */ public static JsonResult convertStr(String str, int length, JsonResult jsonResult) throws UnsupportedEncodingException, Exception { if (!Strings.isNullOrEmpty(str)) { if (str.length() > length) { jsonResult = new JsonResult(false, "最大长度不能超过" + length); return jsonResult; } str = Base64.encode(str, "utf-8"); } jsonResult = new JsonResult(true); jsonResult.setData(str); return jsonResult; } /** * 字符串base64编码 * * @param str * @return * @throws Exception */ public static String convertStrBase64Encode(String str) throws Exception { if (!Strings.isNullOrEmpty(str)) { str = Base64.encode(str, "utf-8"); } return str; } /** * 校验手机端特殊字符进行base64解码 * * @param str * @return * @throws Exception */ public static String convertStr(String str) throws Exception { if (!Strings.isNullOrEmpty(str)) { str = Base64.decode(str, "utf-8"); } return str; } /** * 批量转换map中的value值base64解码 * * @param map * @param keys * @return * @throws Exception */ public static Map<String, Object> convertMap(Map<String, Object> map, String... keys) throws Exception { for (String key : keys) { String value = String.valueOf(map.get(key)); if (!Strings.isNullOrEmpty(value)) { map.put(key, convertStr(value)); } } return map; }
相关文章推荐
- GridControl 获取选中行的数量
- [Android] AsyncTask源码解析
- cocos 2d-x 3.0环境配置
- JQuery按照form下载文件+后台asp.net,非ajax(上)
- Linux的网卡由eth0变成了eth1,如何修复
- 用Qt写的一个仿Windows记事本程序
- 将自定义输入法设置为系统默认输入法
- MFC程序 调用控制台 显示调试信息
- iOS开发 -- 添加自定义ttf字体的方法
- javascript函数表达式
- ArrayList && LinkedList
- ROS笔记
- CentOS配置固定IP
- nginx 重中之重 event 模块
- bimap转base64上传到服务器
- 利用huffman树实现字符文档的压缩//to be continued
- Ubuntu命令笔记
- SQL 分隔字符串
- Linux系统下安装MongoDB 指南
- linux常用的命令