要做全角转换为半角:
(中文网页)网络上的都是getBytes然后修改字节得到
发现根本无法正常运行,自己就思考了下:
全角比半角的差别应该就是一些原来单字节可以描述的字符变成了双字节了
所以只要做一个映射就可以了
static {//初始化全、半角映射
qbMap.put( ' ', ' '); //空格特殊
bqMap.put(' ', ' ' );
for (int c = '!', end = '~', det = '!' - '!'; c <= end; c++) {
Character b = (char) c, q = (char) (c + det);
qbMap.put(q, b);
bqMap.put(b, q);
}
}
public abstract class UtilString {
private static final Logger logger = LoggerFactory.getLogger(UtilString.class);
private static final Map<Character, Character> qbMap = new TreeMap<Character, Character>(),
bqMap = new TreeMap<Character, Character>();
static {//初始化全、半角映射
qbMap.put(' ', ' '); //空格特殊
bqMap.put(' ', ' ');
for (int c = '!', end = '~', det = '!' - '!'; c <= end; c++) {
Character b = (char) c, q = (char) (c + det);
qbMap.put(q, b);
bqMap.put(b, q);
}
}
/** @return 转换为半角 */
public static char q2b(char c) {
Character ret = qbMap.get(c);
return ret == null ? c : ret;
}
/** @return 转换为半角 */
public static String q2b(String value) {
if (value == null || value.isEmpty()) return value;
StringBuilder buf = new StringBuilder(value.length());
for (int i = 0, max = value.length(); i < max; i++) {
buf.append(q2b(value.charAt(i)));
}
return buf.toString();
}
/** @return 转换为全角 */
public static char b2q(char c) {
Character ret = bqMap.get(c);
return ret == null ? c : ret;
}
/** @return 转换为全角 */
public static String b2q(String value) {
if (value == null || value.isEmpty()) return value;
StringBuilder buf = new StringBuilder(value.length());
for (int i = 0, max = value.length(); i < max; i++) {
buf.append(b2q(value.charAt(i)));
}
return buf.toString();
}
}