求教中文字符全角转半角问题

luoxingke 2005-12-16 10:24:41
方法如下,是在论坛里看某位兄弟的方法,我在使用的时候发现转换某些中文的时候出现乱码,请各位大哥指点指点
例如: 0#a5465757oct342342042#13973119452#20051130201232#051212#保健一第一第一#省第一外科#主任#省第一1216#省第一上午
输出后变成:0#a5465757oct342342042#13973119452#20051130201232#051212#?∫坏谝坏谝?省第一外科#主任#省第一1216#省第一上午

public static String getBjChnValue(String key) {
byte[] temp = key.getBytes();
int len = temp.length;
int qjlen = 0;
for (int m = 0; m < len; m++) { //计算全角字母的个数
if (temp[m] == -93) {
qjlen++;
m++;
}
}
byte[] ret = new byte[len - qjlen];
for (int i = 0, j = 0; j < len; i++, j++) {
if (temp[j] == -93) { //全角的
temp[j + 1] += 128;
ret[i] = temp[j + 1];
j++;
} else {
ret[i] = temp[j]; //普通的
}
}
String retString = new String(ret);
return retString;
}

...全文
184 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yesjoy 2006-02-06
  • 打赏
  • 举报
回复
修改一下
// 半角转全角
public static String B2Q(String str)
{
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i ++)
{
char c = str.charAt(i);
if(c >=65281 && c < 65373)
sb.append((char)c);
else
sb.append((char)(c + 65248));
}
return sb.toString();
}

}
yesjoy 2006-02-06
  • 打赏
  • 举报
回复
楼上的不错
不过有个 小小的地方
如果 String strB = ",dfaf@a@";即其中既有 全角也有半角则 B2Q()方法有bug
slaser 2006-02-06
  • 打赏
  • 举报
回复
我比较愚昧,中文哪里来的全脚和半脚的分别?好像我从来没考虑过这个问题。
yuzl32 2006-02-06
  • 打赏
  • 举报
回复
F:\>java T
strQ=0#a5465757oct342342042#13973119452#20051130201232#051212#保健一第一第一#
省第一外科#主任#省第一1216#省第一上午 strB=,dfa@
B2Q(strB)=,dfa@
Q2B(strQ)=0#a5465757oct342342042#13973119452#20051130201232#051212#保健一第一第
一#省第一外科#主任#省第一1216#省第一上午
yuzl32 2006-02-06
  • 打赏
  • 举报
回复 1
试试:

public class T
{
// 半角转全角
public static String B2Q(String str)
{
StringBuffer sb = new StringBuffer();

for (int i = 0; i < str.length(); i ++)
{
sb.append((char)(str.charAt(i) + 65248));
}

return sb.toString();

}

// 全角转半角
public static String Q2B(String str)
{
StringBuffer sb = new StringBuffer();

for (int i = 0; i < str.length(); i ++)
{
char c = str.charAt(i);

if (c >=65281 && c < 65373)
sb.append((char)( c - 65248));
else
sb.append(str.charAt(i));
}

return sb.toString();

}

public static void main(String[] args)
{
// 测试工具类二
//String strQ = "123";
String strQ = "0#a5465757oct342342042#13973119452#20051130201232#051212#保健一第一第一#省第一外科#主任#省第一1216#省第一上午";
String strB = ",dfa@";
System.out.println("strQ="+strQ+" strB="+strB);

System.out.println("B2Q(strB)="+B2Q(strB));
System.out.println("Q2B(strQ)="+Q2B(strQ));
}
}
jimrui 2006-02-06
  • 打赏
  • 举报
回复
我也遇到这种问题?郁闷
luoxingke 2005-12-18
  • 打赏
  • 举报
回复
是的,当字符串里有 保 字的时候就会出乱码,奇怪,尝试过转内码 gbk等都无效
believefym 2005-12-17
  • 打赏
  • 举报
回复
把“保”改成其他字似乎是可以的,不知道为什么
flhyp 2005-12-17
  • 打赏
  • 举报
回复
可以运行吗?
奇伢 2005-12-16
  • 打赏
  • 举报
回复
up,mark

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧