java中全角转半角的核心是unicode码位映射:遍历字符串,对全角数字(u+ff10~ff19)、字母(u+ff21~ff3a、ff41~ff5a)、标点(u+ff01~ff5e)统一减0xfee0,全角空格(u+3000)特殊转为u+0020。

Java 中将全角字符转为半角字符,核心思路是遍历字符串,对每个全角 ASCII 字符(如全角数字、字母、空格、标点)按固定偏移量减去 0xfee0,特殊处理全角空格(0x3000 → 0x0020)。这不是简单编码转换,而是 Unicode 码位映射。
识别常见全角字符范围
全角 ASCII 类字符主要集中在 Unicode 的“CJK 兼容”区块:
- 全角数字(0-9):U+FF10 ~ U+FF19 → 半角 0-9(U+0030 ~ U+0039)
- 全角大写字母(A-Z):U+FF21 ~ U+FF3A → 半角 A-Z(U+0041 ~ U+005A)
- 全角小写字母(a-z):U+FF41 ~ U+FF5A → 半角 a-z(U+0061 ~ U+007A)
- 全角空格( ):U+3000 → 半角空格(U+0020)
- 全角标点(,。!?;:“”等):多数在 U+FF01 ~ U+FF5E,对应 U+0021 ~ U+007E
手动实现转换逻辑(推荐,轻量可控)
不依赖第三方库时,可用 StringBuilder 遍历判断并映射:
<font color="#888">public static String toHalfWidth(String str) {
if (str == null) return null;
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray()) {
if (c >= '\uFF10' && c = '\uFF21' && c = '\uFF41' && c = '\uFF01' && c </font>
使用 Apache Commons Text(适合已有依赖项目)
引入 Maven 依赖后,直接调用 StringUtils.toHalfWidth():
<font color="#888"><dependency><groupid>org.apache.commons</groupid><artifactid>commons-text</artifactid><version>1.12.0</version></dependency></font>
代码示例:
<font color="#888">String full = "Hello,世界! 123"; String half = StringUtils.toHalfWidth(full); // 结果:"Hello,世界! 123"(英数标点变半角,汉字和中文标点不变)</font>
注意:该方法只转换全角 ASCII 类字符,不会动汉字、中文顿号、书名号等,行为与手动逻辑一致。
注意事项与边界情况
实际使用需留意:
- 全角中文标点(如「」、『』、【】、~、…、——)不属于上述映射范围,不会被转换,需额外规则处理
- 某些生僻全角符号(如来自旧字体或私有区)可能无标准半角对应,应原样保留
- 输入含混合内容(如 "订单号:ABC123")时,只转字母数字及英文标点,冒号“:”(U+FF1A)会被转成“:”,但“号”字不变
- 性能敏感场景建议复用 StringBuilder,避免频繁创建对象
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











