李敏  
日历
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
统计
  • 随笔 - 1
  • 文章 - 40
  • 评论 - 4
  • 引用 - 0

导航

常用链接

留言簿(1)

文章分类

文章档案

相册

收藏夹

它山之石

聚贤庄

搜索

  •  

最新评论

 
 
  编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
    String str="abc好吗d";
    
    
int byteCount=6;
    
    String newStr
=split(str,byteCount);
    
    System.out.println(str);
    System.out.println(byteCount);
    
    System.out.println(newStr);

功能模块:
/**
   * 移除截取的字节中的一个汉字单字节
   
*/
     
  
private byte[] removeInvalidByte(byte[]byteArray){
  
    
int newLen=byteArray.length-1;
    
    
byte[]newByteArray=Arrays.copyOf(byteArray,newLen);
    
    
return newByteArray;
  }

  
  
/**
   * 查找截取的字节中是否保留了一个汉字的单字节
   
*/
     
  
private boolean haveFullChineseByte(byte[]byteArray){
    
int count=0;
    
    
for(byte word:byteArray){
      
if(word<0){
        count
++;
      }
      
    }

    
    
boolean isFull=(count%2!=0);
    
    
return isFull;
  }

  
  
private byte[] getSplitBytes(String str,int byteCount){
    
byte byteArray[]=str.getBytes();
    
    
byte newByteArray[]=Arrays.copyOf(byteArray,byteCount);
    
    
/**
    for(int i=0;i<byteCount;i++){
      byte word=byteArray[i];
      
      newByteArray[i]=word;
    }
    
*/

    
return newByteArray;
  }

  
  
/**
   * 截取一个字符串中指定长度的字节(如果最后一位为一个汉字的单字节则进行忽略)
   
*/
     
  
private String split(String str,int byteCount){
    
byte newByteArray[]=getSplitBytes(str,byteCount);
    
    
if(haveFullChineseByte(newByteArray)){
      newByteArray
=removeInvalidByte(newByteArray);
    }

    
    String newStr
=new String(newByteArray);

    
return newStr;
  }






posted on 2011-11-17 20:02 李敏 阅读(225) 评论(0)  编辑  收藏 所属分类: 算法

只有注册用户登录后才能发表评论。


网站导航:
 
 
Copyright © 李敏 Powered by: 博客园 模板提供:沪江博客