Android比较字符串是否为空(isEmpty)

经常需要判断一个字符串变量是否为空,今天特地做了个小小的测试
StringUtils.java:
package com.yx.equipment_collection.utils;

import android.annotation.SuppressLint;
import android.text.TextUtils;
import android.util.Log;

/**
 *
 * 此类描述的是: String帮助类
 *
 * @author: CS YX
 * @version:1.0
 * @date:2014-10-21 下午2:47:08
 */
public class StringUtils {
	private static final String TAG = "StringUtils";
	private static int count = 100000000;

	public static void checkEmpty1(String str) {
		long start = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			if (str == null || str.length() < 1) {
			}
		}
		long end = System.currentTimeMillis();
		Log.i(TAG, "checkEmpty1 --- " + (end - start));
	}

	@SuppressLint("NewApi")
	public static void checkEmpty2(String str) {
		long start = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			if (str == null || str.isEmpty()) {
			}
		}
		long end = System.currentTimeMillis();
		Log.i(TAG, "checkEmpty2 --- " + (end - start));
	}

	public static void checkEmpty3(String str) {
		long start = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			if (str == null || str == "") {
			}
		}
		long end = System.currentTimeMillis();
		Log.i(TAG, "checkEmpty3 --- " + (end - start));
	}

	public static void checkEmpty4(String str) {
		long start = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			if (str == null || str.equals("")) {
			}
		}
		long end = System.currentTimeMillis();
		Log.i(TAG, "checkEmpty4 --- " + (end - start));

	}

	public static void checkEmpty5(String str) {
		long start = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			if (str == null || TextUtils.isEmpty(str)) {
			}
		}
		long end = System.currentTimeMillis();
		Log.i(TAG, "checkEmpty5 --- " + (end - start));

	}

	public static void checkEmpty11(String str) {
		long start = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			if (str != null && str.length() > 0) {
			}
		}
		long end = System.currentTimeMillis();
		Log.i(TAG, "checkEmpty11 --- " + (end - start));
	}

	@SuppressLint("NewApi")
	public static void checkEmpty22(String str) {
		long start = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			if (str != null && !str.isEmpty()) {
			}
		}
		long end = System.currentTimeMillis();
		Log.i(TAG, "checkEmpty22 --- " + (end - start));
	}

	public static void checkEmpty33(String str) {
		long start = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			if (str != null && str != "") {
			}
		}
		long end = System.currentTimeMillis();
		Log.i(TAG, "checkEmpty33 --- " + (end - start));
	}

	public static void checkEmpty44(String str) {
		long start = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			if (str != null && !str.equals("")) {
			}
		}
		long end = System.currentTimeMillis();
		Log.i(TAG, "checkEmpty44 --- " + (end - start));

	}

	public static void checkEmpty55(String str) {
		long start = System.currentTimeMillis();
		for (int i = 0; i < count; i++) {
			if (str != null && !TextUtils.isEmpty(str)) {
			}
		}
		long end = System.currentTimeMillis();
		Log.i(TAG, "checkEmpty55 --- " + (end - start));

	}

}

测试为空如下:test

	public void test() {
		String str = "";
		Log.i("test", "str=\"\"---");
		StringUtils.checkEmpty1(str);
		StringUtils.checkEmpty2(str);
		StringUtils.checkEmpty3(str);
		StringUtils.checkEmpty4(str);
		StringUtils.checkEmpty5(str);
		str = null;
		Log.i("test", "str=null---");
		StringUtils.checkEmpty1(str);
		StringUtils.checkEmpty2(str);
		StringUtils.checkEmpty3(str);
		StringUtils.checkEmpty4(str);
		StringUtils.checkEmpty5(str);
		str = "null";
		Log.i("test", "str=\"null\"---");
		StringUtils.checkEmpty1(str);
		StringUtils.checkEmpty2(str);
		StringUtils.checkEmpty3(str);
		StringUtils.checkEmpty4(str);
		StringUtils.checkEmpty5(str);
		str = new String();
		Log.i("test", "str=new String()---");
		StringUtils.checkEmpty1(str);
		StringUtils.checkEmpty2(str);
		StringUtils.checkEmpty3(str);
		StringUtils.checkEmpty4(str);
		StringUtils.checkEmpty5(str);

	}

测试结果输入如下图:

由此图可以看出方法3(str == "")用时是最少的;其次就是方法1(str.length() < 1)和方法2(str.isEmpty()) ;

方法4(str.equals(""))耗时较多;方法5(TextUtils.isEmpty(str))最耗时

测试非空如下:test

	public void test1() {
		String str = "";
		Log.i("test", "str=\"\"---");
		StringUtils.checkEmpty11(str);
		StringUtils.checkEmpty22(str);
		StringUtils.checkEmpty33(str);
		StringUtils.checkEmpty44(str);
		StringUtils.checkEmpty55(str);
		str = null;
		Log.i("test", "str=null---");
		StringUtils.checkEmpty11(str);
		StringUtils.checkEmpty22(str);
		StringUtils.checkEmpty33(str);
		StringUtils.checkEmpty44(str);
		StringUtils.checkEmpty55(str);
		str = "null";
		Log.i("test", "str=\"null\"---");
		StringUtils.checkEmpty11(str);
		StringUtils.checkEmpty22(str);
		StringUtils.checkEmpty33(str);
		StringUtils.checkEmpty44(str);
		StringUtils.checkEmpty55(str);
		str = new String();
		Log.i("test", "str=new String()---");
		StringUtils.checkEmpty11(str);
		StringUtils.checkEmpty22(str);
		StringUtils.checkEmpty33(str);
		StringUtils.checkEmpty44(str);
		StringUtils.checkEmpty55(str);
	}

测试结果如下图:

如上图所示,首先是方法33(str != null && str != "")比较占优势;方法11(str != null && str.length() > 0)和方法22(str != null && !str.isEmpty())总体来说,不相上下;

方法44(str != null && !str.equals(str != null && !TextUtils.isEmpty(str)))较耗时;方法55()还是最耗时

也有人说,用‘==’判断字符串不准确,应该用‘equals’,个人觉得String一般都是直接=定义,想必没有几个人定义一个字符串会new出来吧。

为什么TextUtils.isEmpty()耗时最多,查看源码原来isEmpty()已经判断了‘==null’:

    /**
     * Returns true if the string is null or 0-length.
     * @param str the string to be examined
     * @return true if str is null or zero length
     */
    public static boolean isEmpty(CharSequence str) {
        if (str == null || str.length() == 0)
            return true;
        else
            return false;
    }

源码也是用.length()判断的,如果你觉得‘==’不靠谱,推荐使用.length()方法判断!

以上纯属个人见解......谢谢



时间: 2024-10-12 20:43:35

Android比较字符串是否为空(isEmpty)的相关文章

字符串的截取,判断字符串是否相等和字符串是否为空的方法总结Java,Android

最近做项目Android时遇到了字符串的截取,判断字符串是否相等和字符串是否为空问题刚好用的上自己也知道些,所以整理了方便以后用,和供大家参考,有什么更好的方法或者其它方法我么可以一起交流,谢谢大家! 一.可以用subSequence方法截取任意长度的字符 例如: String s="AndroidandJava"System.out.println(s.subSequence(0, 1)); 运行结果为:A 原方法为:String.subSequence(beginIndex(开始字

JS判断字符串是否为空、过滤空格、查找字符串位置等函数集

这是一个由网上收集的JS代码段,用于判断指定字符串是否为空,过滤字符串中某字符两边的空格.查找指定字符串开始的位置.使用IsFloat函数判断一 个字符串是否由数字(int or long or float)组成.IsDigital函数判断一个字符串是否由数字(int or long)组成等功能: //IsEmpty函数判断一个字符串是否为空 function IsEmpty(his) { flag = true; for(var i=0;i<his.length;i++) { if(his.c

java判断字符串是否为空的方法总结

http://blog.csdn.net/qq799499343/article/details/8492672 以下是java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s)); 方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法: if(s == null || s.length() <= 0); 方法三: Java SE 6.0 才开始提供的方法, 效率和方法二

java判断一个字符串是否为空的方法总结

今天写代码发现一个判断字符串是否为空的问题 贴上我的代码: if(!username.equals("")&&!userpassword.isEmpty()&&!phString.isEmpty()&&!userpassword2.isEmpty()) 如上:如果此处phString这个字符串中什么也没有,则phString.isEmpty()这种方法去判断是否空会报空指针异常 当phString="51cto";时,

Java 判断字符串是否为空的四种方法、优缺点与注意事项

以下是Java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s));方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法: if(s == null || s.length() <= 0);方法三: JavaSE 6.0 才开始提供的方法, 效率和方法二几乎相等, 但出于兼容性考虑, 推荐使用方法二. if(s == null || s.isEmpty()); 方法四:

java如何判断字符串是否为空的方法

以下是java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s)); 方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法: if(s == null || s.length() <= 0); 方法三: Java SE 6.0 才开始提供的方法, 效率和方法二几乎相等, 但出于兼容性考虑, 推荐使用方法二. if(s == null || s.isEmpty()); 方法

android开发字符串工具类(一)

1 package com.gzcivil.utils; 2 3 import java.io.BufferedReader; 4 import java.io.ByteArrayOutputStream; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import java.math.BigDecimal; 8 import java.text.SimpleDateFormat; 9 import jav

java判断字符串是否为空

以下是 Java 判断字符串是否为空的三种方法. 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低. 方法二: 比较字符串长度, 效率高, 是我知道的最好一个方法. 方法三: Java SE 6.0 才开始提供的方法, 效率和方法二几乎相等, 但出于兼容性考虑, 推荐使用方法二. 1:if(s == null || s.equals("")); 2:if(s == null || s.length() <= 0); 3:if(s == null || s.isEmpt

字符串判断为空

判断一个字符串是否为空方法有三种 str!=null "".equal(str) str.length()!=0 (注意:length是属性,一般集合类对象拥有的属性,取得集合的大小.例如:数组.length表示数组的属性取得数组的长度 length()是方法,一般字符串对象有该方法,也是取得字符串的长度.例如:字符串.length() 在java中有()的表示方法,没有的表示属性) 说明: null表示这个字符串不指向任何的东西,如果这时候调用它的话,会报空指针异常 "&q