linux将文件内容全角转半角,字符串半角全角互转详解

全角和半角之间的互相转换。

ASCII的一些知识。

\n 回车换行

\t 横向跳到下一制表位置

\v 竖向跳格

\b 退格

\r 回车

\f 走纸换页

\\ 反斜线符"\"

\' 单引号符

\ddd 1~3位八进制数所代表的字符

\xhh 1~2位十六进制数所代表的字符

空格的ASCII是32,转换为16进制是x20,使用转义字符为 \x20

ASCII码表

0818b9ca8b590ca3270a3433284dd417.png

下面贴代码,在参考别人的基础上另作整理。

package com.kongming.someuseful;

/**

* @author ACER

*

* 实现对字符串中全角字符和半角字符的互相转换

*/

public class QuanJiao_BanJiao_Transform {

// 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表中除空格外的可见字符与对应的全角字符的相对偏移,全角半角转换偏移量为65248

static final int CONVERT_STEP = 65248;

// 全角空格的值,没有遵循上面说的ASCII的相对偏移量,必须单独处理,全角空格 ASCII值为12288

static final char SBC_SPACE = 12288;

// 半角空格的值,ASCII值为32(Decimal),半角空格 ' '

static final char DBC_SPACE = 32;

/**

* --半角字符转为全角字符

*

* @param src

* 包含半角字符的字符串

* @return 返回全角字符的字符串

*/

public 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));

// 不对空格以及ascii表中其他可见字符之外的字符做任何处理

} else {

buf.append(ca[i]);

}

}

return buf.toString();

}

/**

* --全角字符转为半角字符

*

* @param src

* 包含全角字符的字符串

* @return 返回半角字符的字符串

*/

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) {

String qj = "kmsocial,周杰。. -。-";

String bj = "kmsocial,周杰. -.-";

String qj2bj = QuanJiao_BanJiao_Transform.qj2bj(qj);

String bj2qj = QuanJiao_BanJiao_Transform.bj2qj(bj);

System.out.println("转换前:" + qj + "\n转换后:" + qj2bj);

System.out.println("转换前:" + bj + "\n转换后:" + bj2qj);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值