編寫一個截取字符串的函數,輸入爲一個字符串和字節數,輸出爲按字節截取的字符串。 可是要保證漢字不被截半個,如「我ABC」4,應該截爲「我AB」,輸入「我ABC漢DEF」,6,應該輸出爲「我ABC」而不是「我ABC+漢的半個」。
GB23十二、GBK、GB18030,CP936以及CNS11643都知足條件 -- 中文是佔用2個字節的,英文是佔用1一個字節 。由於中文轉換爲byte字節,隨着編碼的不一樣,轉換的字節長度也會不通,如編碼爲UTF-8,一箇中文字符串轉換爲byte佔三個字節.
package com.suanfa;
import java.io.UnsupportedEncodingException;
public class CharactersSplit {
/**
* @param text 目標字符串
* @param length 截取長度
* @param encode 採用的編碼方式
* @return
* @throws UnsupportedEncodingException
*/
public static String substring(String text, int length, String encode)
throws UnsupportedEncodingException {
if (text == null) {
return null;
}
StringBuilder sb = new StringBuilder();
int currentLength = 0;
for (char c : text.toCharArray()) {
currentLength += String.valueOf(c).getBytes(encode).length;
if (currentLength <= length) {
sb.append(c);
} else {
break;
}
}
return sb.toString();
}
public static void main(String[] args) throws UnsupportedEncodingException {
String text = "我ABC漢DEF";
int length1 = 3;
int length2 = 6;
String[] encodes = new String[] { "GB2312", "GBK", "GB18030", "CP936",
"CNS11643", "UTF-8" };
for (String encode : encodes) {
System.out.println(new StringBuilder().append("用").append(encode)
.append("編碼截取字符串 -- 【").append(text).append("】")
.append(length1).append("個字節的結果是【")
.append(substring(text, length1, encode)).append("】")
.toString());
System.out.println(new StringBuilder().append("用").append(encode)
.append("編碼截取字符串 -- 【").append(text).append("】")
.append(length2).append("個字節的結果是【")
.append(substring(text, length2, encode)).append("】")
.toString());
}
}
}
運行後輸出:
用GB2312編碼截取字符串 -- 【我ABC漢DEF】3個字節的結果是【我A】
用GB2312編碼截取字符串 -- 【我ABC漢DEF】6個字節的結果是【我ABC】
用GBK編碼截取字符串 -- 【我ABC漢DEF】3個字節的結果是【我A】
用GBK編碼截取字符串 -- 【我ABC漢DEF】6個字節的結果是【我ABC】
用GB18030編碼截取字符串 -- 【我ABC漢DEF】3個字節的結果是【我A】
用GB18030編碼截取字符串 -- 【我ABC漢DEF】6個字節的結果是【我ABC】
用CP936編碼截取字符串 -- 【我ABC漢DEF】3個字節的結果是【我A】
用CP936編碼截取字符串 -- 【我ABC漢DEF】6個字節的結果是【我ABC】
用CNS11643編碼截取字符串 -- 【我ABC漢DEF】3個字節的結果是【我A】
用CNS11643編碼截取字符串 -- 【我ABC漢DEF】6個字節的結果是【我ABC】
用UTF-8編碼截取字符串 -- 【我ABC漢DEF】3個字節的結果是【我】
用UTF-8編碼截取字符串 -- 【我ABC漢DEF】6個字節的結果是【我ABC】java