论坛首页 Java企业应用论坛

按字节截取字符串的简单方法

浏览 3767 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (15)
作者 正文
   发表时间:2009-06-18   最后修改:2010-07-01
网络上的按字节截取字符串大部分用如下的 for 循环处理:
char[] tmpChar = src.toCharArray();
				
				for(int i = 0;i<tmpChar.length && reInt < size;i++){
					String s1 = String.valueOf(tmpChar[i]);
					byte[] b = s1.getBytes();
					reInt += b.length;
					reStr += tmpChar[i];
				}

但是我突然想到一个更简单的办法,贴出来给大家分享一下

public String subString(String src,int size){
    if(src == null || src.equals("") || src.length()<=size){
        return src;
    }
    String result = new String(src.getBytes(),0,size);
		
    if(!src.startsWith(result)){
        result = new String(src.getBytes(),0,size-1);
    }
		
    return result;
}


注意:本文章绝对原创,属字节截取字符串史无前列的方法,版权所有,转载请注明出处。
   发表时间:2009-06-18  
public class SplitStr{
	
			public String subString(String src,int size){
			String result = new String(src.getBytes(),0,size);
			
			if(!src.startsWith(result)){
				result = new String(src.getBytes(),0,size-1);
			}
			
			return result;
		}
		
		public static void main(String args[]){
				String src = "Saito";
				int size =3;
				int reInt = 0;
				String reStr = "";
			
				SplitStr ss = new SplitStr();
			        long timeNew = System.currentTimeMillis() ;
				for(int k=0;k<10000;k++){
				char[] tmpChar = src.toCharArray();
				for(int i = 0;i<tmpChar.length && reInt < size;i++){
					String s1 = String.valueOf(tmpChar[i]);
					byte[] b = s1.getBytes();
					reInt += b.length;
					reStr += tmpChar[i];
				}
				}
				long timeNewTest = System.currentTimeMillis() ;
				System.out.println(timeNewTest -timeNew);
				
				long timeOld = System.currentTimeMillis() ;
				for(int i=0;i<10000;i++){
					ss.subString(src,size);
				}
				long timeOldTest = System.currentTimeMillis() ;
				System.out.println(timeOldTest-timeOld);
			}
	}

测试结果:
>java SplitStr
4
68
>Exit code: 1
>java SplitStr
4
67
>Exit code: 1
>java SplitStr
4
70
>Exit code: 1
>java SplitStr
6
69
>Exit code: 1
>java SplitStr
4
67
>Exit code: 1


你这个跟原先的代码性能差据差不多在10~20倍之间。 原因应该你自己知道吧。 

    所以版权问题还是放心好啦。。安心啦。
0 请登录后投票
   发表时间:2009-06-18  
你试过 50万次吗,看下面这段
public class Text {
	 public static void main(String args[]){   
         String src = "Saito";   
         int size =3;   
        
         long timeNew = System.currentTimeMillis() ;   
         for(int k=0;k<500000;k++){   
        	 subString(src,size);   
         }   
         long timeNewTest = System.currentTimeMillis() ;   
         System.out.println("新的效率:"+(timeNewTest -timeNew));   
            
         long timeOld = System.currentTimeMillis() ;   
         for(int i=0;i<500000;i++){   
        	 subStringOld(src,size);   
         }   
         long timeOldTest = System.currentTimeMillis() ;   
         System.out.println("原理的效率:"+(timeOldTest-timeOld));   
     }   

	public static String subStringOld(String src,int size){
		char[] tmpChar = src.toCharArray();   
		String reStr = "";
		int len = 0;
		for(int i = 0;i<tmpChar.length && len < size;i++){   
            String s1 = String.valueOf(tmpChar[i]);   
            byte[] b = s1.getBytes();   
            len += b.length;  
            
            if(len < size){
            	reStr += tmpChar[i];
            }
        }  
		return reStr;
	}
	
	public static String subString(String src,int size){
		String result = new String(src.getBytes(),0,size);
		
		if(!src.startsWith(result)){
			result = new String(src.getBytes(),0,size-1);
		}
		
		return result;
	}
}
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics