题目如下:给定一个字符串,包含中文字符和英文字符,取给定大小字节的子串。
代码如下:
import java.io.UnsupportedEncodingException;
public class CutString {
/**
* 判断是否是一个中文汉字
* @param c
* @return true表示是中文汉字,false表示是英文字符
* @throws UnsupportedEncodingException
*/
public static boolean isChineseChar(char c) throws UnsupportedEncodingException {
return String.valueOf(c).getBytes("GBK").length > 1;
}
/**
* 按照字节位数截取字符串
* @param original
* @param count 要截取的字符串的字节位数
* @return
* @throws UnsupportedEncodingException
*/
public static String subString(String original, int count) throws UnsupportedEncodingException {
if(null!=original && !"".equals(original)) {
original = new String (original.getBytes(), "GBK");
if(count>0 && count<original.getBytes().length) {
StringBuffer buff = new StringBuffer();
char c;
for(int i=0; i<count; i++) {
c = original.charAt(i);
buff.append(c);
if(CutString.isChineseChar(c)) {
//一个中文字符两个字节,所以对于一个字符串,遇到一个中文字符,顶两个字节。
--count;
}
}
return buff.toString();
}
}
return original;
}
public static void main(String[] args) {
String s = "我zwr爱Java";
System.out.println("原始字符串:" + s);
try {
System.out.println("截取1位" + CutString.subString(s, 1));
System.out.println("截取2位" + CutString.subString(s, 2));
System.out.println("截取3位" + CutString.subString(s, 3));
System.out.println("截取4位" + CutString.subString(s, 4));
System.out.println("截取6位" + CutString.subString(s, 6));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}