字符串的一些判断
来源:互联网 发布:淘宝花呗有利息吗 编辑:程序博客网 时间:2024/06/01 09:22
* 判断为标点符号(去除乱码、字母、数字、中文的其他所有) * * @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; }
0 0
- 字符串的一些判断
- C# 关于判断字符串为空的一些方法
- C# 关于判断字符串为空的一些方法
- C# 关于判断字符串为空的一些方法
- C# 关于判断字符串为空的一些方法
- Java判断字符串是否包含一些字符
- 关于android字符串中的一些判断
- 常用的一些判断
- 判断字符串的特殊字符串
- 判断字符串的长度
- 判断字符串的大小写
- 兄弟字符串的判断
- 判断字符串的编码
- 字符串的亲属关系判断
- ios字符串的判断
- 回文字符串的判断
- 字符串的判断
- UTF8字符串的判断
- activeMq实战
- MFC程序 调用控制台 显示调试信息
- cocos 2d-x 3.0环境配置
- [Android] AsyncTask源码解析
- Android开发教程01:Android的系统构架及特性
- 字符串的一些判断
- GridControl 获取选中行的数量
- private static final long serialVersionUID = 1L;
- 如何编程实现二维图形的旋转
- 中文pppoe中文拨号的解决方案
- hdu 1106 排序
- 查看windows系统中的程序运行记录
- 折线图(四)计算坐标轴文字大小,确定准确位置
- [CodeForces 510C]Fox And Names[字典序][拓扑排序]