1、題目描述
在GBK編碼環(huán)境下豹芯,編寫一個截取字符串的函數(shù)悄雅,輸入為一個字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串铁蹈。但是要保證漢字不被截半個宽闲,如"我ABC"4,應該截為"我AB"握牧,輸入"我ABC漢DEF"容诬,6,應該輸出為"我ABC"而不是"我ABC+漢的半個"沿腰。
2览徒、解決代碼
public static String subString(String str, int splitByteNum) throws UnsupportedEncodingException
{
//輸入無效判斷
if (null == str || "".equals(str) || splitByteNum <= 0)
{
return "";
}
int tempSubStrLength = splitByteNum;
//截取長度為要截取字節(jié)數(shù)的子串。說明str.length()字符串中字符個數(shù)一定小于等于字節(jié)數(shù)颂龙。
String subStr = str.substring(0, tempSubStrLength > str.length() ? str.length() : tempSubStrLength);
//在GBK編碼下习蓬,得到子串的字節(jié)長度
int subStrByteNum = subStr.getBytes("GBK").length;
//如果子串的字節(jié)長度大于字符長度,說明一定有漢字
while (subStrByteNum > tempSubStrLength)
{
/**
* 在子串末尾去掉一個字符措嵌,重新計算子串在GBK下的字節(jié)長度躲叼。
* 因為是去掉一個字符,而漢字占一個字符铅匹,所以不用考慮半個漢字的問題
*/
int subStrLength = --splitByteNum;
subStr = str.substring(0, tempSubStrLength > str.length() ? str.length() : subStrLength);
subStrByteNum = subStr.getBytes("GBK").length;
}
return subStr;
}