java 全角半角字符转换如何实现
程序员文章站
2023-12-03 14:04:46
复制代码 代码如下: package com.whatycms.common.util; import org.apache.commons.lang.stringutil...
复制代码 代码如下:
package com.whatycms.common.util;
import org.apache.commons.lang.stringutils;
/**
* <pre>
* 提供对字符串的全角->半角,半角->全角转换
* </pre>
*/
public class bcconvert {
/**
* ascii表中可见字符从!开始,偏移位值为33(decimal)
*/
static final char dbc_char_start = 33; // 半角!
/**
* ascii表中可见字符到~结束,偏移位值为126(decimal)
*/
static final char dbc_char_end = 126; // 半角~
/**
* 全角对应于ascii表的可见字符从!开始,偏移值为65281
*/
static final char sbc_char_start = 65281; // 全角!
/**
* 全角对应于ascii表的可见字符到~结束,偏移值为65374
*/
static final char sbc_char_end = 65374; // 全角~
/**
* ascii表中除空格外的可见字符与对应的全角字符的相对偏移
*/
static final int convert_step = 65248; // 全角半角转换间隔
/**
* 全角空格的值,它没有遵从与ascii的相对偏移,必须单独处理
*/
static final char sbc_space = 12288; // 全角空格 12288
/**
* 半角空格的值,在ascii中为32(decimal)
*/
static final char dbc_space = ' '; // 半角空格
/**
* <pre>
* 半角字符->全角字符转换
* 只处理空格,!到˜之间的字符,忽略其他
* </pre>
*/
private static string bj2qj(string src) {
if (src == null) {
return src;
}
stringbuilder buf = new stringbuilder(src.length());
char[] ca = src.tochararray();
for (int i = 0; i < ca.length; i++) {
if (ca[i] == dbc_space) { // 如果是半角空格,直接用全角空格替代
buf.append(sbc_space);
} else if ((ca[i] >= dbc_char_start) && (ca[i] <= dbc_char_end)) { // 字符是!到~之间的可见字符
buf.append((char) (ca[i] + convert_step));
} else { // 不对空格以及ascii表中其他可见字符之外的字符做任何处理
buf.append(ca[i]);
}
}
return buf.tostring();
}
/**
* <pre>
* 全角字符->半角字符转换
* 只处理全角的空格,全角!到全角~之间的字符,忽略其他
* </pre>
*/
public static string qj2bj(string src) {
if (src == null) {
return src;
}
stringbuilder buf = new stringbuilder(src.length());
char[] ca = src.tochararray();
for (int i = 0; i < src.length(); i++) {
if (ca[i] >= sbc_char_start && ca[i] <= sbc_char_end) { // 如果位于全角!到全角~区间内
buf.append((char) (ca[i] - convert_step));
} else if (ca[i] == sbc_space) { // 如果是全角空格
buf.append(dbc_space);
} else { // 不处理全角空格,全角!到全角~区间外的字符
buf.append(ca[i]);
}
}
return buf.tostring();
}
public static void main(string[] args) {
system.out.println(stringutils.trimtoempty(" a,b ,c "));
string s = "nihaohk | nihehe ,。 78 7 ";
s=bcconvert.qj2bj(s);
system.out.println(s);
system.out.println(bcconvert.bj2qj(s));
}
}
控制台输出如下:
复制代码 代码如下:
a,b ,c
nihaohk | nihehe ,。 78 7
nihaohk | nihehe ,。 78 7