字符串中的中文字符长度处理

xywl 2005-11-30 01:08:47
我的一个程序中需要统计字符串长度,但string中把汉字作为一个字符,我需要按2个字符来计算长度,如何实现好?
如:"dfs中"为5个字符
...全文
751 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fashi1000 2005-12-05
  • 打赏
  • 举报
回复
我没任何转换怎么就把"ABC中"的长度计算成5了,你在什么程序里搞成4的
转成 utf8 每个中文字算成四个字符
eureka0891 2005-12-05
  • 打赏
  • 举报
回复
public static int lengthOfQuanJiao(String value) {
if (value == null)
return 0;

StringBuffer buff = new StringBuffer(value);
int length = 0;
String stmp;
for (int i = 0; i < buff.length(); i++) {
stmp = buff.substring(i, i + 1);

try {
stmp = new String(stmp.getBytes("utf8"));
} catch (Exception e) {

}

if (stmp.getBytes().length > 1) {
length += 2;
} else {
length += 1;
}
}
return length;
}
捏造的信仰 2005-12-03
  • 打赏
  • 举报
回复
晕死。

String str = "楼主真是伤脑筋12345."
System.out.println(str.getBytes().length);
xywl 2005-12-03
  • 打赏
  • 举报
回复
上面错了.
我试了stmp = new String(stmp.getBytes("GBK"));
System.out.println(lengthOfQuanJiao("中国abc"));
结果是
4
结果应为7啊.
xywl 2005-12-03
  • 打赏
  • 举报
回复
我试了stmp = new String(stmp.getBytes("GBK"));
System.out.println(lengthOfQuanJiao("中国abc"));
结果是
4
结果应为5啊.
eureka0891 2005-12-01
  • 打赏
  • 举报
回复
根据编码有关,最简单的:
/**
* 取得字符串的长度(按全角字符计算,如果是半角字符,则只占半个字符),取得的长度进行四舍五入。
* @param 字符串
* @return 全角长度
*/
public static int lengthOfQuanJiao(String value) {
if (value == null)
return 0;

StringBuffer buff = new StringBuffer(value);
float length = 0.0f;
String stmp;
for (int i = 0; i < buff.length(); i++) {
stmp = buff.substring(i, i + 1);

try {
stmp = new String(stmp.getBytes("utf8"));
} catch (Exception e) {

}

if (stmp.getBytes().length > 1) {
length += 1;
} else {
length += 0.5f;
}
}
return Math.round(length);
}

这儿写你实际的编码,
stmp = new String(stmp.getBytes("utf8"));
实际应该做的话,是取bytes的unicode码,然后判断unicode是否在此范围内.
xywl 2005-11-30
  • 打赏
  • 举报
回复
老大们帮帮忙啊

62,614

社区成员

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

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