浏览 3805 次
锁定老帖子 主题:按字节截取字符串的简单方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (15)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-18
最后修改:2010-07-01
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; } 注意:本文章绝对原创,属字节截取字符串史无前列的方法,版权所有,转载请注明出处。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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倍之间。 原因应该你自己知道吧。 所以版权问题还是放心好啦。。安心啦。 |
|
返回顶楼 | |
发表时间: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; } } |
|
返回顶楼 | |