金陵之风尘

灰尘,也有生活;
它们在风中飘着,在烟中恋爱,在暖气上抚摸;
它们在好几个地方找我……
posts - 5, comments - 13, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

按字节截取含双字节的字符串!

Posted on 2006-10-13 09:57 风尘仆仆 阅读(2306) 评论(6)  编辑  收藏 所属分类: Java
String.substring(0, n)函数返回该字符串前n个字符的新字符串,但如果只想返回前n个字节,而字符串中又含有中文等双字节字符怎么办呢,我写了个函数,不过只假定参数字符串中只含有单字节和双字节字符,不包含4字节的Unicode32。

例如:"我ABC是中国人DEF",截取5个字节应返回"我ABC",截取6个字节应返回"我ABC",截取7个字节应返回"我ABC是"。

函数中主要是使用String.getBytes()判断一个字符包含单节还是双字节,因为要多次创建String字符,速度比较慢,谁有更好的方法也请给出建议。

 1 static final String subStringbyBytes(final String str, final int bytes) {
 2     int bytesCounter = 0;
 3     String resStr = null;
 4 
 5     // 首字符为双字节, 而要求输出一个字节
 6     if(bytes == 1) {
 7       String aChar = str.substring(01);
 8       byte[] bytesInChar = aChar.getBytes();
 9 
10       if(bytesInChar.length == 2)
11         return "";
12     }
13 
14     for(int i = 0; i < str.length(); i++) {
15       String aChar = str.substring(i, i + 1);
16       byte[] bytesInChar = aChar.getBytes();
17 
18       if(bytesInChar.length == 1) {
19         // single byte character
20         ++bytesCounter;
21 
22         if(bytesCounter == bytes) {
23           resStr = str.substring(0, i + 1);
24           break;
25         }
26       }
27       else if(bytesInChar.length == 2){
28         // double bytes character
29         bytesCounter += 2;
30 
31         if(bytesCounter > bytes) {
32           resStr = str.substring(0, i);
33           break;
34         }
35 
36         if(bytesCounter == bytes) {
37           resStr = str.substring(0, i + 1);
38           break;
39         }
40       }
41     }
42 
43     return resStr;
44   }

评论

# re: 按字节截取含双字节的字符串!  回复  更多评论   

2006-10-13 13:55 by 1
现在去www.mylinux.com.cn网站趣味问答,做题目,奖积分.积分还能直接购物呢.提供给你一个学习的机会,对软件编程人员有很大的帮助哦

# re: 按字节截取含双字节的字符串!  回复  更多评论   

2006-10-13 21:12 by Web 2.0 技术资源
效率太低了...........

给个简单的处理方式吧~~~

public static String getShorterString( String input , int bytes )
{
try
{
byte[] array = input.getBytes("GBK");
if( bytes >= array.length ) return input;
String result = new String(array , 0 , bytes ,"GBK");
return result.length() > 0 ? result : new String(array , 0 , bytes - 1 ,"GBK");
}
catch (UnsupportedEncodingException e)
{
return input;
}
}

# re: 按字节截取含双字节的字符串!  回复  更多评论   

2006-10-16 00:40 by yyuan
是的,我也感觉我的代码效率比较低,谢谢!

# re: 按字节截取含双字节的字符串!  回复  更多评论   

2006-10-18 15:43 by 123bingbing
增开7群,号码 30440732
8群 30756649
9群 30178567
10群 28694497

我们的qq群:15096318 学习程序的都可以来

# re: 按字节截取含双字节的字符串!  回复  更多评论   

2008-06-20 09:33 by rakor
@Web 2.0 技术资源
兄弟,你写的是JAVA代码吧~~~~~~~

# re: 按字节截取含双字节的字符串!  回复  更多评论   

2008-06-20 09:35 by rakor
不好意思,走错地方了,见谅

只有注册用户登录后才能发表评论。


网站导航: