判断 Java 中的空字符串
Mar 4th, 2008
Add Comment
以下是 Java 判断字符串是否为空的三种方法.
方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低.
方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法.
方法三: Java SE 6.0 才开始提供的方法, 效率和方法二几乎相等, 但出于兼容性考虑, 推荐使用方法二.
以下代码在我机器上的运行结果: (机器性能不一, 仅供参考)
function 1 use time: 172ms
function 2 use time: 78ms
function 3 use time: 79ms
public class CompareStringNothing { String s = ""; long n = 10000000; private void function1() { long startTime = System.currentTimeMillis(); for(long i = 0; i < n; i++) { if(s == null || s.equals("")); } long endTime = System.currentTimeMillis(); System.out.println("function 1 use time: "+ (endTime - startTime) +"ms"); } private void function2() { long startTime = System.currentTimeMillis(); for(long i = 0; i < n; i++) { if(s == null || s.length() <= 0); } long endTime = System.currentTimeMillis(); System.out.println("function 2 use time: "+ (endTime - startTime) +"ms"); } private void function3() { long startTime = System.currentTimeMillis(); for(long i = 0; i < n; i++) { if(s == null || s.isEmpty()); } long endTime = System.currentTimeMillis(); System.out.println("function 3 use time: "+ (endTime - startTime) +"ms"); } public static void main(String[] args) { CompareStringNothing com = new CompareStringNothing(); com.function1(); com.function2(); com.function3(); } }
声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: 判断 Java 中的空字符串
博主之是填充一下博客,各位就不要认真了 呵呵,实现的方式千千万万
不对吧
在循环中 s.leng() 始终只算一次 所以发的时间很少 s.equals 每次都比较所以时间长
for(long i = 0; i < n; i++) {
s=""+i;
if(s == null || s.equals(""));
}
你这样试试 s.leng() 发的时间是更长的
所以对于单次运算来说 s.equals 比 s.leng() 发的时间更少
用apache commons 提供的StringUtils判断不是更好.有轮子.没有必要发明轮子了吧
@忘记月亮:
如果null,则throws NullPointerException;
很注重效率啊
public static boolean stringIsEmpty(String testStr){
StringBuffer sb = new StringBuffer(testStr);
for(int i = 0;i < sb.length(); i ++){
Character ch = new Character(sb.charAt(i));
if(!ch.equals(' '))
return false;
}
return true;
}
这不很简单吗?用不着JDK6.0来支持.
@忘记月亮:
s == null 是有必要存在的.
如果 String 类型为 null, 而去进行 equals(String) 或 length() 等操作会抛出异常的.
怎么3个方法中都用到了s==null,是不是没有必要考虑这个?
String s=null和s==""应该存在区别吧,前者并没有在并没有在栈中存放数据,后者则在栈中开辟了一个内容为空的空间。前者的对象s没有指向,后面的有。
只是个人理解,不知道对不对?
汗... 复习一下而已.
isEmpty 是 1.6 才有的, 现在大多还在用 1.4.2 或 1.5 吧.
也是俺偶像.^^
好专业!mg12是俺偶像@-@
Java还有isEmpty函数哦...受教了
汗, 基本用第一种..
深夜还发文啊, 我在边等看球, 边搞那个评论框, 头大, 搞了好久