/** 

  * 递归截取字符串。(对具有中文和英文的字符串,进行截取,获得其中的中文字符串) 

  * @author xiaozd 

  */ 

 public  class ChineseEnglishSubStr { 


     /** 

      *  测试用例 

      * @param args 

      * 用于测试工具类是否正常 

      */ 

     public static void main(String[] args){ 

         String test="lovo四件套test测试test1"; 

          

         StringBuffer sb = new StringBuffer(test); 

          

         System.out.println("测试:----"+sb.substring(0,5).getBytes().length); 

          

         //递归获取中英文字符串中中文部分 

 //        int length=sb.length(); 

 //        int bytesLength=sb.toString().getBytes().length; 

         sb=getChinesePart(sb); 

         System.out.println("sb---"+sb.toString()); 

     } 

      

      

     /** 

      * 递归截取字符串。(对具有中文和英文的字符串,进行截取,获得其中的中文字符串) 

      * @author xiaozd 

      */ 

     public static StringBuffer getChinesePart(StringBuffer stringBuffer){ 

          

         stringBuffer=getStringBuffer(stringBuffer); 

          

         if(stringBuffer.toString().getBytes().length==2*stringBuffer.length()){ 

             System.out.println("aaa"); 

         } 

         else{ 

             stringBuffer=getChinesePart(stringBuffer); 

         } 

          

         return stringBuffer; 

     } 

      

     /** 

      *     字符串截取时,实际调用的递归方法 

      * @param stringBuffer 

      * @return 

      */ 

     public static StringBuffer getStringBuffer(StringBuffer stringBuffer){ 

          

         int start=0; 

         int end=0; 

         StringBuffer sb = new StringBuffer(""); 

         for (int i = 0; i < stringBuffer.length(); i++){ 

              

             //通过字符的bytes长度来确定当前字符是否为中文,中文为2,英文,数字等为1 

             String s = String.valueOf(stringBuffer.charAt(i)); 

             int len = s.getBytes().length; 

              

             if(end==0){ 

                 //如果是英文 

                 if(len==1){ 

                      

                     end++; 

                      

                 }else{ 

                     //如果是中文 

                     start++; 

                     end++; 

                      

                 } 

                  

             }else{ 

                  

                 //如果是英文 

                 if(len==1){ 

                      

                     end++; 

                      

                 } 

                 if(len!=1 || i==stringBuffer.length()-1){ 

                     //如果是中文 

                     if(start!=end){ 

                         sb=new StringBuffer(stringBuffer.delete(start, end)); 

                         break; 

                     } 

                     start++; 

                     end++; 

                      

                     if(i==stringBuffer.length()-1){ 

                          

                         sb=stringBuffer; 

                     } 

                 } 

             } 

         } 

         return sb; 

     } 


 }