package 字符串类; import java.util.LinkedHashSet; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; /*字符串操作类(人民币转换/全角半角字符/去重字符串/判断是不是合法手机/字符串匹配的算法)*/ public class 字符串操作 { /** * 人民币转成大写 hangeToBig * * @param value * @return String */ public static String 人民币转成大写(double value) { char[] hunit = { '拾', '佰', '仟' }; // 段内位置表示 char[] vunit = { '万', '亿' }; // 段名表示 char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; // 数字表示 long midVal = (long) (value * 100); // 转化成整形 String valStr = String.valueOf(midVal); // 转化成字符串 String head = valStr.substring(0, valStr.length() - 2); // 取整数部分 String rail = valStr.substring(valStr.length() - 2); // 取小数部分 String prefix = ""; // 整数部分转化的结果 String suffix = ""; // 小数部分转化的结果 // 处理小数点后面的数 if (rail.equals("00")) { // 如果小数部分为0 suffix = "整"; } else { suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来 } // 处理小数点前面的数 char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组 char zero = '0'; // 标志'0'表示出现过0 byte zeroSerNum = 0; // 连续出现0的次数 for (int i = 0; i < chDig.length; i++) { // 循环处理每个数字 int idx = (chDig.length - i - 1) % 4; // 取段内位置 int vidx = (chDig.length - i - 1) / 4; // 取段位置 if (chDig[i] == '0') { // 如果当前字符是0 zeroSerNum++; // 连续0次数递增 if (zero == '0') { // 标志 zero = digit[0]; } else if (idx == 0 && vidx > 0 && zeroSerNum < 4) { prefix += vunit[vidx - 1]; zero = '0'; } continue; } zeroSerNum = 0; // 连续0次数清零 if (zero != '0') { // 如果标志不为0,则加上,例如万,亿什么的 prefix += zero; zero = '0'; } prefix += digit[chDig[i] - '0']; // 转化该数字表示 if (idx > 0) prefix += hunit[idx - 1]; if (idx == 0 && vidx > 0) { prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿 } } if (prefix.length() > 0) prefix += '圆'; // 如果整数部分存在,则有圆的字样 return prefix + suffix; // 返回正确表示 } /** * 全角字符转半角字符 QJToBJChange * * @param QJStr * @return String */ public static final String 全角字符转半角字符(String QJStr) { char[] chr = QJStr.toCharArray(); String str = ""; for (int i = 0; i < chr.length; i++) { chr[i] = (char) ((int) chr[i] - 65248); str += chr[i]; } return str; } /** * 去掉字符串中重复的子字符串 removeSameString * * @param str * @return String */ public static String 去掉字符串中重复的子字符串(String str) { Set mLinkedSet = new LinkedHashSet(); String[] strArray = str.split(" "); StringBuffer sb = new StringBuffer(); for (int i = 0; i < strArray.length; i++) { if (!mLinkedSet.contains(strArray[i])) { mLinkedSet.add(strArray[i]); sb.append(strArray[i] + " "); } } System.out.println(mLinkedSet); return sb.toString().substring(0, sb.toString().length() - 1); } /** * 过滤常见特殊字符 * */ public static String 过滤常见特殊字符(String src) { if (src == null) return ""; StringBuilder result = new StringBuilder(); if (src != null) { src = src.trim(); for (int pos = 0; pos < src.length(); pos++) { switch (src.charAt(pos)) { case '\"': result.append("""); break; case '<': result.append(" < "); break; case '>': result.append(" > "); break; case '\'': result.append("'"); break; case ' & ': result.append("&"); break; case ' % ': result.append("&pc;"); break; case '_': result.append("&ul;"); break; case '#': result.append("&shap;"); break; case ' ? ': result.append("&ques;"); break; default: result.append(src.charAt(pos)); break; } } } return result.toString(); } /** * 反过滤特殊字符 */ public static String 反过滤特殊字符(String src) { if (src == null) return ""; String result = src; result = result.replace(""", "\"").replace("'", "\'"); result = result.replace("<", "<").replace(">", ">"); result = result.replace("&", "&"); result = result.replace("&pc;", "%").replace("&ul", "_"); result = result.replace("&shap;", "#").replace("&ques", "?"); return result; } /** * 判断是不是合法手机 handset 手机号码 */ public static boolean isHandset(String handset) { try { if (!handset.substring(0, 1).equals("1")) { return false; } if (handset == null || handset.length() != 11) { return false; } String check = "^[0123456789]+$"; Pattern regex = Pattern.compile(check); Matcher matcher = regex.matcher(handset); boolean isMatched = matcher.matches(); if (isMatched) { return true; } else { return false; } } catch (RuntimeException e) { return false; } } /** * 字符串匹配的算法. */ public String getMaxMatch(String a, String b) { StringBuffer tmp = new StringBuffer(); String maxString = ""; int max = 0; int len = 0; char[] aArray = a.toCharArray(); char[] bArray = b.toCharArray(); int posA = 0; int posB = 0; while (posA < aArray.length - max) { posB = 0; while (posB < (bArray.length - max)) { if (aArray[posA] == bArray[posB]) { len = 1; tmp = new StringBuffer(); tmp.append(aArray[posA]); while ((posA + len < aArray.length) && (posB + len < bArray.length) && (aArray[posA + len] == bArray[posB + len])) { tmp.append(aArray[posA + len]); len++; } if (len > max) { max = len; maxString = tmp.toString(); } } posB++; } posA++; } return maxString; } }