java实现中英文混合字符截取方法
发布:kinglong | 发布时间: 2006年7月21日| public class Tools { public Tools() { } /** /** |
PS:这个方法可能不是最优化的,但基本能解决中英文混合字符截取问题了,如果你有更好的方法,可以发邮件(kinglong@gmail.com)给我!本来想写一些内容的,只是我目前这个ASP空间TMD太稳定了,明天就准备换服务器空间了,到时应该能稳定了!也能多写得内容了!
- 相关文章:
我的第一个AS3程序:Kclock(Flash 时钟) (2006-7-7 20:25:28)
使用FMS(FCS)来合并多个flv视频文件的实现 (2006-6-30 1:3:26)
[转载]XXTEA加密算法的各种程序实现整理 (2006-6-28 11:9:31)
flash8上传功能的后台程序收集2 (2006-6-13 18:14:45)
有关web页面内容文件强制下载代码整理 (2006-4-21 9:59:35)
惊喜,我的一点编程感想仅然有英文版本! (2006-4-7 21:19:9)
Flash渐进色填充方法调试以及一些个人感想 (2006-3-30 14:48:56)
flash和xml实现二级菜单效果 (2006-3-27 10:17:5)
MicrophoneVolumeBox组件 (2006-3-24 12:53:58)
公开原CF版Blog程序,供CF爱好者学习和研究 (2006-3-17 9:53:50)
- 1.空心菜
- 大钱,好久没给你打cs了
你写的好像好复杂的
public static void test(String str){
byte[] bc = null;
int byteCount = 0;
bc = str.getBytes();
byteCount = bc.length;
System.out.println("byteCount:"+ byteCount);
}
改一下就是你想要的了
不小心碰到,踩一脚^_^ - 2006-9-11 15:41:17 回复该留言
- 2.纳米阳光
- http://www.yeekom.com
- 这几天一直在弄这个问题,在这找到一种方法,谢了,我笨鸟先飞了
- 2006-12-22 10:15:55 回复该留言
- 5.kinglong
- http://www.klstudio.com
- to java初学者:
你说的问题,我这边等会做一下测试!
to 阳光灿烂 :
这个是因为中文字符的编码采用用两个字节来表示的,而且每个字节的第一位都是1,所以它就是由两个负数来表示的,上面的程序也是通过这个原因来实现的,但本身这个方法也不是最有效率的,希望能找到一个更好的方法! - 2007-4-21 19:56:58 回复该留言
- 7.kinglong
- http://www.klstudio.com
- 不那么想当然吧,你自己可以做字符测试看一看,英文字符(a)和中文字符(中),这两个字符比较是不是不一样?
- 2007-5-14 0:03:24 回复该留言
- 8.patriotlml
- http://blog.csdn.net/patriotlml
- /**
* 截取一段字符的长度,不区分中英文,如果数字不正好,则少取一个字符位
*
* @author patriotlml
* @param String
* origin, 原始字符串
* @param int
* len, 截取长度(一个汉字长度按2算的)
* @return String, 返回的字符串
*/
public static String substring(String origin, int len) {
if (origin == null || origin.equals(""))
return "";
byte[] strByte = new byte[len];
if (len > MyUtil.length(origin))
return origin;
System.arraycopy(origin.getBytes(), 0, strByte, 0, len);
int count = 0;
for (int i = 0; i < len; i++) {
int value = (int) strByte[i];
if (value < 0) {
count++;
}
}
if (count % 2 != 0) {
len = (len == 1) ? ++len : --len;
}
return new String(strByte, 0, len);
} - 2007-5-16 15:54:16 回复该留言
- 9.patriotlml
- http://blog.csdn.net/patriotlml
- /**
* 判断一个字符是Ascill字符还是其它字符(如汉,日,韩文字符)
*
* @param char
* c, 需要判断的字符
* @return boolean, 返回true,Ascill字符
*/
public static boolean isLetter(char c) {
int k = 0x80;
return c / k == 0 ? true : false;
}
/**
* 得到一个字符串的长度,显示的长度,一个汉字或日韩文长度为2,英文字符长度为1
*
* @param String
* s ,需要得到长度的字符串
* @return int, 得到的字符串长度
*/
public static int length(String s) {
if (s == null)
return 0;
char[] c = s.toCharArray();
int len = 0;
for (int i = 0; i < c.length; i++) {
len++;
if (!isLetter(c[i])) {
len++;
}
}
return len;
} - 2007-5-16 15:54:24 回复该留言
- 10.Jarod
- http://sam1860.javaeye.com
- 你的代码平台移植不行啊,
在系统默认编码为UTF-8时,每个中文的getBytes得到的是3字节
应该getBytes("GBK")才能保证中文作为2个Byte - 2007-7-22 20:34:13 回复该留言
发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。




