给定一个字符串,包含中文字符和英文字符,取给定大小字节的子串。
题目如下:给定一个字符串,包含中文字符和英文字符,取给定大小字节的子串。
代码如下:
- 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();
- }
- }
- }