免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1988 | 回复: 9
打印 上一主题 下一主题

如何精确截取字符串? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-06 18:21 |只看该作者 |倒序浏览
比如:字符串"我just一个工人"半角总长度为14,我用substring(0,2)得到的是"我",而不是"我j",怎样让substring得到"我j"? 也就是我想把汉字当成长度为2的两个半角来处理,如何实现呢?

论坛徽章:
0
2 [报告]
发表于 2006-03-06 18:42 |只看该作者
恩恩,很好的需求

论坛徽章:
0
3 [报告]
发表于 2006-03-06 19:01 |只看该作者

  1. public static void main(String[] args) {
  2.         String str = "我just一个工人";
  3.         System.out.println(str.substring(0,2));
  4. }
复制代码

输出结果
我j

论坛徽章:
0
4 [报告]
发表于 2006-03-06 19:02 |只看该作者
你用的是js还是java?

论坛徽章:
0
5 [报告]
发表于 2006-03-06 22:49 |只看该作者
不对啊!!java使用统一的unicode编码,char型为2个字节啊....难道String分了单双字节的么?

论坛徽章:
0
6 [报告]
发表于 2006-03-07 02:34 |只看该作者
自己实践一下

  1.         public static void main(String[] args) {
  2.                 String str = "我just一个工人";
  3.                 System.out.println(str.substring(0, 2));
  4.                 char[] chs = str.toCharArray();
  5.                 for(char ch : chs)
  6.                 {
  7.                         System.out.print(ch);
  8.                         System.out.print(" : ");
  9.                         System.out.println((int)ch);
  10.                 }
  11.         }
复制代码


结果:
我j
我 : 25105
j : 106
u : 117
s : 115
t : 116
一 : 19968
个 : 20010
工 : 24037
人 : 20154

论坛徽章:
0
7 [报告]
发表于 2006-03-07 10:38 |只看该作者
原帖由 perryhg 于 2006-3-7 03:34 发表
自己实践一下
[code]
        public static void main(String[] args) {
                String str = "我just一个工人";
                System.out.println(str.substring(0, 2));
                char[] chs = str.toCharArray();
                 ...


多谢分享~

论坛徽章:
0
8 [报告]
发表于 2006-03-08 00:14 |只看该作者

回复 6楼 perryhg 的帖子

谢谢
我自己还发现另外一个方法,如下:

System.out.println(new String(strBuffer.getBytes(), iStart, iLen))

这样就可以精确截取了。

论坛徽章:
0
9 [报告]
发表于 2006-03-08 17:12 |只看该作者
怎么把我搞晕了???
看楼主的描述就不明白,怎么感觉矛盾???
原帖由 lljsun 于 2006-3-6 18:21 发表
比如:字符串"我just一个工人"半角总长度为14,我用substring(0,2)得到的是"我",而不是"我j"

这个好像应该得到和楼主相反的结果啊
怎样让substring得到"我j"? 也就是我想把汉字当成长度为2的两个半角来处理,如何实现呢?

如果把汉字长度当成1,才能得到"我j",怎么是2呢?

有些晕了。




原帖由 lljsun 于 2006-3-8 00:14 发表
谢谢
我自己还发现另外一个方法,如下:
System.out.println(new String(strBuffer.getBytes(), iStart, iLen))
这样就可以精确截取了。

这个是按照平台缺省的字符编码方式把该 String 转换成字节,再截取的,会把一个汉字截成两半的吧
StringBuffer没查到有getBytes方法,只有String有。


论坛徽章:
0
10 [报告]
发表于 2006-03-09 09:11 |只看该作者
原帖由 只爱一点点 于 2006-3-8 17:12 发表
怎么把我搞晕了???
看楼主的描述就不明白,怎么感觉矛盾???

这个好像应该得到和楼主相反的结果啊

如果把汉字长度当成1,才能得到"我j",怎么是2呢?

有些晕了。





这个是按照 ...


应该不会把汉子拆成两半,都是双字节吧?但出乱码的可能性非常大
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP