package substr; 


import java.io.UnsupportedEncodingException; 

/** 

 * 判断是否是一个中文汉字 

 * 

 * @param c 

 * 字符 

 * @return true表示是中文汉字,false表示是英文字母 

 * @throws UnsupportedEncodingException 

 * 使用了JAVA不支持的编码格式 

 */ 


public class Substr { 


 /** 

 * @param args 

 */ 

 public static void main(String[] args) { 

 // TODO Auto-generated method stub 

 String s = "lm李明sw"; 

 //判断字符串中是否包含中文,实质是中文和字符都是一个字符,但中文是2个字节 

 System.out.println("字符长度="+s.length()); 

 System.out.println("字节长度="+s.getBytes().length); 

 //判断字符串中是否包含中文,实质是中文和字符都是一个字符,但中文是2个字节 

 System.out.println("字节长度="+s.substring(0,4)); 

 System.out.println("原始字符串:" + s); 

 try { 

 System.out.println("截取前1位:" + Substr.substr(s, 1)); 

 System.out.println("截取前2位:" + Substr.substr(s, 2)); 

 System.out.println("截取前4位:" + Substr.substr(s, 4)); 

 System.out.println("截取前6位:" + Substr.substr(s, 6)); 

 System.out.println("截取前10位:" + Substr.substr(s, 8)); 

 } catch (UnsupportedEncodingException e) { 

 e.printStackTrace(); 

 } 


 } 

 //截取含有中文汉字的字符串的方法 

 public static boolean iszhongwen(char c) throws UnsupportedEncodingException{ 

 // 如果字节数大于1,是汉字 

 // 以这种方式区别英文字母和中文汉字并不是十分严谨,但在这个题目中,这样判断已经足够了 

 return String.valueOf(c).getBytes("gbk").length>1; 

 } 

 /** 

 * 按字节截取字符串 

 * 

 * @param s 

 * 原始字符串 

 * @param count 

 * 截取位数 

 * @return 截取后的字符串 

 * @throws UnsupportedEncodingException 

 * 使用了JAVA不支持的编码格式 

 */ 


 public static String substr(String s,int count) throws UnsupportedEncodingException{ 

 StringBuffer sb = new StringBuffer(); 

 // 原始字符不为null,也不是空字符串 


 if(s!=null && !"".equals(s)){ 

 // 将原始字符串转换为GBK编码格式 

 s = new String(s.getBytes("gbk")); 

 System.out.println("数="+s.getBytes("gbk").length); 

 // 要截取的字节数大于0,且小于原始字符串的字节数 

 if(count>0 && count<=s.getBytes("gbk").length){ 

 //StringBuffer sb = new StringBuffer(); 

 char c ; 

 for(int i=0;i<count;i++){ 

 c = s.charAt(i); 

 sb.append(c); 

 if(Substr.iszhongwen(c)){ 

 // 遇到中文汉字,截取字节总数减1 


 --count; 

 } 

 } 

 return sb.toString(); 

 }else{ 

 System.out.println("过来"); 

 } 

 } 

 return sb.toString(); 

 //return s; 

 } 

 //截取含有中文汉字的字符串的方法 


}