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; |
} |
} |