编程题
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC汉”而不是“我ABC+汉的半个”。
在网上看了很多关于此问题的解答,都感觉挺复杂的,于是自己写了一个,供大家参考,程序存在不足之处,敬请批主指正。
import java.io.UnsupportedEncodingException;
public class TestC {
/**
* @author zhyd
* @param input
* 输入字符串
* @param subLength
* 想要截取的字节数
* @throws UnsupportedEncodingException
*/
public String subStrByBytes(String input, int subLength)
throws UnsupportedEncodingException {
// 总的字符数,A是一个字符,汉 也只是一个字符
int totalCharacter = input.length();
// 总的字节数
int totalBytes = input.getBytes("GBK").length;
System.out.println("total bytes:" + input.getBytes("GBK").length
+ ",total character: " + totalCharacter);
if (subLength > totalBytes) {
System.err.println("input length error!please check.");
return "";
}
int current = 0;
String result = "";
// 遍历字符串,直到截取目标长度
for (int i = 0; i < totalCharacter; i++) {
String tmp = input.substring(i, i + 1);
int c_len = tmp.getBytes("GBK").length;
if (current < subLength) {
current += c_len;
result += tmp;
}
}
System.out.println("result==" + result);
return result;
}
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "我ABC,中<汉DEF";
int len = 7;
TestC demo = new TestC();
String out = demo.subStrByBytes(str, len);
System.out.println(str + " >>get " + len + " bytes is : " + out);
}
}