关于字符串截取的问题? 输入一个字符串,比如"中ABC大EFG" 再输一个数字代表了字符串的字节数,比如4,控制台输出:中AB 输入6,控制台输出:中ABC大 而不是:中ABC+大的半个,程序怎么写? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.blogjava.net/nokiaguy/archive/2008/09/07/227485.html 中文的ascii码是负数,你可以给个判断,如果是负数的话,执行... public static void main(String[] args) throws Exception { System.out.println(subString("中ABC大EFG", 1)); } static String subString(String src, int length) throws Exception { byte[] b = src.getBytes("gbk"); boolean isChinese = false; if (length <= b.length) { if (b[length-1] < 0) {//当所截取长度的最后一个字节是汉子时才需要进行汉子解析否则的话就是正常的截取就行了 for (int i = 0; i < length; i++) { if (b[i] < 0 && !isChinese) {// 如果是汉子往后多吞一个字节 i++; length++; } else { isChinese = true; } } } } return new String(b, 0, length, "gbk"); } 上面的代码测试了下有问题请无视之public static void main(String[] args) throws Exception { System.out.println(subString("中ABC大EFG", 5)); } static String subString(String src, int length) throws Exception { byte[] b = src.getBytes("gbk"); boolean halfChinese = false;//是否是半个汉子 if (length >= b.length) { length=b.length; } if (b[length - 1] < 0) {// 当所截取长度的最后一个字节是汉子时才需要进行汉子解析否则的话就是正常的截取就行了 for (int i = 0; i < length; i++) { if (b[i] < 0 && !halfChinese) {// 如果是汉子往后多吞一个字节(字节数<0并且不是半个汉子) halfChinese = true; } else {//这里的情况就有是正数的或者虽然<0但前面已经有半个汉子了这里就标记为不是半个汉子 halfChinese = false; } } if (halfChinese) length++; } return new String(b, 0, length, "gbk"); } 寻求 eclipse 生成 UML 的小工具或者插件 《SQL语言艺术》《SQL解惑》哪一个更好些? 请各位帮看一下这个小程序怎么运行不了 新手问一个简单问题啊,请大家赐教 sun提供的资源下载 小弟搞了一天关于session的问题,请教了!!!!! Statement.execute(String sql) 急.................. goto const 是关键字吗?谢谢 请问谁有用JB开发APPLET的资料? 一个搞不懂的问题?请帮忙!!!! windowListener 类详解 我用FTPCLient访问IIS上的ftp服务,报错
public static void main(String[] args) throws Exception {
System.out.println(subString("中ABC大EFG", 1));
} static String subString(String src, int length) throws Exception {
byte[] b = src.getBytes("gbk");
boolean isChinese = false;
if (length <= b.length) {
if (b[length-1] < 0) {//当所截取长度的最后一个字节是汉子时才需要进行汉子解析否则的话就是正常的截取就行了
for (int i = 0; i < length; i++) {
if (b[i] < 0 && !isChinese) {// 如果是汉子往后多吞一个字节
i++;
length++;
} else {
isChinese = true;
}
}
}
}
return new String(b, 0, length, "gbk");
}
public static void main(String[] args) throws Exception {
System.out.println(subString("中ABC大EFG", 5));
} static String subString(String src, int length) throws Exception {
byte[] b = src.getBytes("gbk");
boolean halfChinese = false;//是否是半个汉子
if (length >= b.length) {
length=b.length;
}
if (b[length - 1] < 0) {// 当所截取长度的最后一个字节是汉子时才需要进行汉子解析否则的话就是正常的截取就行了
for (int i = 0; i < length; i++) {
if (b[i] < 0 && !halfChinese) {// 如果是汉子往后多吞一个字节(字节数<0并且不是半个汉子)
halfChinese = true;
} else {//这里的情况就有是正数的或者虽然<0但前面已经有半个汉子了这里就标记为不是半个汉子
halfChinese = false;
}
}
if (halfChinese)
length++;
}
return new String(b, 0, length, "gbk");
}