写个简单的试试 public static String getStr(String src, int len) {
if (src == null) return null;
if (src.getBytes().length <= len) return src; byte[] s = src.getBytes();
int flag = 0;
for(int i=0;i<len;++i){
if(s[i] < 0) flag++;
}
if(flag%2!=0) len--; byte[] d = new byte[len];
System.arraycopy(s, 0, d, 0, len);
return new String(d);
}
if (src == null) return null;
if (src.getBytes().length <= len) return src; byte[] s = src.getBytes();
int flag = 0;
for(int i=0;i<len;++i){
if(s[i] < 0) flag++;
}
if(flag%2!=0) len--; byte[] d = new byte[len];
System.arraycopy(s, 0, d, 0, len);
return new String(d);
}
解决方案 »
- Java Frame
- 用spring做队列 高手来~~~~
- 一个高难度问题,请高人指点,关于swing下装载已有的JApplet,如何模拟getParamter()的问题
- 高手帮我 看一下
- 请各位帮个忙,谢谢!
- 关于java中字符串的处理问题
- 500 分求 The JasperReports Ultimate Guide.pdf 。
- 我已经安装了Microsoft SQL Server 2000 Driver for JDBC。但是在JB9中database控件中还是没找到这个驱动,为什么?马上给分,在线
- 问一个有关swing的问题,大虾们帮帮忙
- 我写了一个java文件,遇到这样的编译错误:
- 求,从一棵树中快速地生成一棵子树的算法
- 请问如何应用统一的组件风格?
http://community.csdn.net/Expert/topic/3816/3816238.xml?temp=.4273188
System.out.println((int)"爱".charAt(0));
System.out.println((int)"做".charAt(0));
System.out.println((int)"很".charAt(0));
System.out.println((int)"徐".charAt(0));
25105
29233
20570
24456
24464那是不是判断下首位是不是2呢,若是2,那再判断是不是数字2,若不是,就认为是中文,那就不能截断,呵呵乱想
byte[] getBytes(int len, String s) {
int pos = 0;
int step = 0;
for (int i=0; i<s.length(); ++i) {
char ch = s.charAt(i);
if (ch > 255) {
step = 2;
} else {
step =1;
}
if (pos+step > len) {
break;
}
}
byte[] arr = new byte[len];
byte[] origin = s.getBytes();
for (int i =0; i< pos; ++i) {
arr[i] = origin[i];
}
return arr;
}
getBytes()是把一个字符串转成一个byte数组,因为计算机的数据都是基于字符的,也就是说一个字符串实际上就是一个字符流,因此可以转为字符数组。汉字是双字节编码,英文是单字节编码。构成汉字的第一个字节是一个负值,第二个是正值。
而构成英文字母的字节总是正值。至于为什么这么定义,我想你还是看一下unicode码的规范吧。