字符串操作(人民币转成大写/全角字符转半角字符/去掉字符串中重复的子字符串/过滤常见特殊字符/反过滤特殊字符/判断是不是合法手机/字符串匹配的算法)
2013-01-03 11:08
661 查看
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<String> mLinkedSet = new LinkedHashSet<String>(); 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; } }
相关文章推荐
- 类库------对一些字符串进行操作的类1.判断输入是否数字2.截取字符串函数3.过滤输入信息4.生成随机数5.生成验证码图片6.获取汉字第一个拼音7.半角转全角8.全角转半角
- 算法学习(java实现之字符串篇)·····判断字符串是否没有重复字符
- ASP.NET过滤重复字符与字符串数组去掉重复字符串几种方法
- 实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)
- 全角转半角,提取数字,提取英文,提取中文,过滤重复字符,过滤重复字符2
- 把字符串中的汉字去掉,然后判断全角和半角
- Java中判断一个字符串String是否包含特殊字符的代码
- 1.1-判断字符串是否有重复字符
- 字符串操作,去重复以及字符转化字符串
- Servlet过滤字符串的HTML特殊字符
- LintCode Unique Characters 判断字符串是否没有重复字符
- 常用的js判断(手机号码/固定电话/输入框的长度/链接/特殊字符)
- java从数据库中取出数据写到txt或excel,并对字符串操作—取子字符串,删除字符串中某些特殊字符
- 去掉字符串中重复的字符 --- 华为笔试题
- iOS开发中手机号码和价格金额有效性判断及特殊字符的限制
- 转:假设有一个字符串aabcad,请编写一段程序,去掉字符串中不相邻的重复字符。
- 判断字符串中有无重复字符,不用额外额数据结构
- 手机的九宫格图形解锁算法(判断是否合法)
- C语言字符串的常见特殊操作(除了string.c实现的那些接口)
- 一道面试题:从一个字符串中找出第一个不重复字符;算法二;