`

判断String是否为空的小技巧

    博客分类:
  • java
阅读更多

 

              //比较 方法一,大多数人都这么比较

		String param = config.getInitParameter("log-level");
		if (param != null && !"".equals(param)) {
			final Level level = Log.getLevel(param);
			if (level != null) Log.lookup("org.zkoss").setLevel(level);
			else log.error("Unknown log-level: "+param);
		}
             //比较 方法二,(而我研究的源码基本都这么比较)
              String param = config.getInitParameter("log-level");
		if (param != null && param.length() > 0) {
			final Level level = Log.getLevel(param);
			if (level != null) Log.lookup("org.zkoss").setLevel(level);
			else log.error("Unknown log-level: "+param);
		}

 // 下面我们看一下equals,length,isEmpty的源码

  //String中equals方法内部代码

  public boolean equals(Object anObject) {
	if (this == anObject) {
	    return true;
	}
	if (anObject instanceof String) {
	    String anotherString = (String)anObject;
	    int n = count;
	    if (n == anotherString.count) {
		char v1[] = value;
		char v2[] = anotherString.value;
		int i = offset;
		int j = anotherString.offset;
		while (n-- != 0) {
		    if (v1[i++] != v2[j++])
			return false;
		}
		return true;
	    }
	}
	return false;
    }

   //String.length()的源码

 /**
     * Returns the length of this string.
     * The length is equal to the number of <a href="Character.html#unicode">Unicode
     * code units</a> in the string.
     *
     * @return  the length of the sequence of characters represented by this
     *          object.
     */
    public int length() {
        return count;
    }
    //String.isEmpty的源码
  /**
     * Returns <tt>true</tt> if, and only if, {@link #length()} is <tt>0</tt>.
     *
     * @return <tt>true</tt> if {@link #length()} is <tt>0</tt>, otherwise
     * <tt>false</tt>
     *
     * @since 1.6
     */
    public boolean isEmpty() {
	return count == 0;
    }






 

仅从代码多少以及逻辑判断来看,length,isEmpty都非常简单,对于一般比较判断来说,

 

首先我猜测:length,isEmpty是相差无几的,equals方法就望尘莫及了,

 

 

 

下面做一个测试,证明我们的猜测

 

测试代码如下

 

 

private static final String sunflower = "sunflower";
	private static final int COUNT= 1000000000;

	public static void main(String[] args) {
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		System.out.println("开始计算...\n");

		Long begin = System.currentTimeMillis();
		for (int j = 0; j < COUNT; j++) {
			testEmptyByLength(sunflower);
		}
		calculateDuration("length test", begin);

		begin = System.currentTimeMillis();

		for (int j = 0; j < COUNT; j++) {
			testEmptyByEmpty(sunflower);
		}

		calculateDuration("empty test", begin);

		begin = System.currentTimeMillis();

		for (int j = 0; j < COUNT; j++) {
			testEmptyByEquals(sunflower);
		}
		calculateDuration("equals test", begin);
	}

	public static void calculateDuration(String method, long begin) {
		System.out.println(method + "\t:"
				+ (System.currentTimeMillis() - begin) / 1000);
	}

	public static boolean testEmptyByLength(String str) {
		return str == null || str.length() < 1;
	}

	/**
	 * empty方法是jdk1.6添加的方法,如果是早期版本不兼容
	 * 
	 * @param str
	 * @return
	 */
	public static boolean testEmptyByEmpty(String str) {
		return str == null || str.isEmpty();
	}

	public static boolean testEmptyByEquals(String str) {
		return "".equals(str);
	}
 

 

输出结果:

 

 

 

 

开始计算(s)

 

length test :0

empty test :0

equlas test :8


 

 

 

结论:

 

String.isEmpty()方法是jdk1.6中添加的,其方法体和length()方法一样,从性能和兼容性,length()更好,

 

所以如果对字符串非严格判断是否为空,建议使用String.length>0判断,如果严格判断是否全部为" "字符,就要自己写或者用common lang StringUtils.isBlank了

 

isBlank方法代码补充:

 

 

  /**
     * <p>Checks if a String is whitespace, empty ("") or null.</p>
     *
     * <pre>
     * StringUtils.isBlank(null)      = true
     * StringUtils.isBlank("")        = true
     * StringUtils.isBlank(" ")       = true
     * StringUtils.isBlank("bob")     = false
     * StringUtils.isBlank("  bob  ") = false
     * </pre>
     *
     * @param str  the String to check, may be null
     * @return <code>true</code> if the String is null, empty or whitespace
     * @since 2.0
     */
    public static boolean isBlank(String str) {
        int strLen;
        if (str == null || (strLen = str.length()) == 0) {
            return true;
        }
        for (int i = 0; i < strLen; i++) {
            if ((Character.isWhitespace(str.charAt(i)) == false)) {
                return false;
            }
        }
        return true;
    }
 

 

 

注:本人不是性能主义者,而是追求更好的方法!!

 

 

 

 

 

 

 

 

 

 

 

 

 

14
8
分享到:
评论
12 楼 kissroom112 2010-07-01  
不错,确实不错
11 楼 buru 2010-06-29  
用1.4, 自己实现isEmpty() equals() equalsIgnorecase()
10 楼 sunflowers 2010-06-29  
ansjsun 写道
如果是"    "呢???大多数验证为空的时候...空格也要去掉的
我们都是这么写的str!=null&&str.trim().leng()>0


本文结论部分已有解决方案

9 楼 ansjsun 2010-06-29  
如果是"    "呢???大多数验证为空的时候...空格也要去掉的
我们都是这么写的str!=null&&str.trim().leng()>0
8 楼 mathfox 2010-06-29  
小技巧,记住了。
7 楼 sunflowers 2010-06-26  

代码疏漏,其中判断语句"".equals(param)前却少!操作符

String param = config.getInitParameter("log-level"); 
    if (param != null && "".equals(param)) { 
        final Level level = Log.getLevel(param); 
        if (level != null) Log.lookup("org.zkoss").setLevel(level); 
        else log.error("Unknown log-level: "+param); 
    } 


特此感谢skywen的提醒,

由于他的关注和细心观察,发现了我的bug,

关注他,请点这里skywen
6 楼 yuwenchun 2010-06-26  
方法一:
if (param != null && "".equals(param)) { ... }
如果是作为空或者空字符串判断的话,个人觉得要这么写吧
if (param != null && "".equals(param.trim())) { ... }
方法二同上,
个人意见,不知道是否正确。
5 楼 sunflowers 2010-06-25  
woniu1983 写道
俺目前基本用1.5, 常用的就是 equals。

学习了。

LZ 可以吧 isEmpty的代码也贴过来与equals的比较下。



谢谢提醒,已补充
4 楼 woniu1983 2010-06-25  
俺目前基本用1.5, 常用的就是 equals。

学习了。

LZ 可以吧 isEmpty的代码也贴过来与equals的比较下。
3 楼 sunflowers 2010-06-25  
hadesmile 写道
对于可读性来说,isempty更好


isEmpty可读性确实很好,
2 楼 sunflowers 2010-06-25  
hadesmile 写道
对于可读性来说,isempty更好

String.isEmpty()方法是jdk1.6中添加的,其方法体和length()方法一样,从性能和兼容性,length()更好,
1 楼 hadesmile 2010-06-25  
对于可读性来说,isempty更好

相关推荐

    标准库string处理数字的方法

    在C++编程中,`string`是STL(Standard Template Library,标准模板库)中的一个非常重要的组件,它为字符串操作提供了丰富的功能。对于初学者而言,掌握如何利用`string`进行数字处理是一项基本而重要的技能。本文...

    C# String类型判断数据源码

    2. **字符串的空值检查**:C#中的字符串提供了`string.IsNullOrEmpty()`方法来检查字符串是否为空或null。例如,`if (string.IsNullOrEmpty(str)) {...}`。 3. **字符串比较**:C#提供了几种比较字符串的方式,包括...

    java判断时间大小

    ### Java 判断时间大小知识点详解 #### 一、前言 在Java开发中,经常会遇到比较日期或时间大小的问题,特别是在处理用户输入的数据时。本文将详细介绍如何在Java中实现日期与时间的比较,包括使用`...

    简单的string类

    6. **比较字符串**:`compare()`方法可以进行字符串之间的比较,返回值可以用来判断字符串是否相等或大小关系。 7. **拷贝和赋值**:`copy()`用于将字符串的一部分拷贝到字符数组,`assign()`用于给字符串赋新值。 ...

    利用指针思想判断是否为回文.docx

    ### 利用指针思想判断是否为回文 在计算机科学中,回文是指一个字符串正着读和反着读都一样的特性。本篇文章将基于提供的文件信息来深入探讨如何利用C语言中的指针思想来判断一个字符串是否是回文。 #### 知识点...

    C++随手代码收藏 自定义实现 String 类.docx

    在C++编程语言中,自定义实现`String`类是一个常见的练习,旨在理解对象导向编程的基本概念,如构造函数、赋值运算符重载、比较运算符重载...这有助于提高编程技巧,并为理解和使用标准库中的`std::string`类打下基础。

    string check

    4. **空值检查**:确认字符串是否为空或者全由空格组成,防止空值引发的程序错误。可以使用`isEmpty()`(Java)或`isspace()`(Python)进行判断。 5. **编码检查**:检查字符串的编码格式,确保在不同系统或平台...

    java开发中的一些常用小技巧

    ### Java开发中的常用小技巧详解 ... - 使用`isEmpty()`方法代替`equals("")`来判断字符串是否为空。 以上这些技巧不仅可以帮助开发者编写更健壮、易于维护的Java应用程序,还能提高程序的整体性能和安全性。

    C#中把字符串String转换为整型Int的小例子

    在C#编程中,有时我们需要将用户输入或者从其他数据源获取的字符串转换为整型数值,以便进行数学计算或与其他整型数据进行比较。...希望这个小例子能帮助您理解如何在实际项目中应用这个转换技巧。

    java判断本地文件是否存在.txt

    - **空路径或非法路径**:如果传入的路径为空或者不合法(例如路径中包含非法字符),`exists()`方法可能会抛出异常。 - **文件权限问题**:如果程序没有足够的权限访问指定的路径,`exists()`方法可能会返回`false`...

    精彩编程与编程技巧-判断是否已经建立 Dial Up 连接...

    #### 一、编程技巧——判断是否已建立拨号连接 **标题及描述概览:** 本篇文章将深入介绍一种实用的编程技巧,即如何通过编程来判断当前计算机是否已建立拨号(Dial-Up)网络连接。此方法适用于需要检测用户网络...

    判断是否重复输入数据

    "判断是否重复输入数据"这个主题聚焦于确保数据库中的信息唯一性,避免冗余和数据不一致。在这个问题中,我们将主要讨论如何在数据库层面和编程语言层面(如C#)检查并防止重复数据的输入。 首先,我们来探讨数据库...

    精彩编程与编程技巧-判断文件是否在IE的缓存中...

    ### 知识点一:判断文件是否存在于IE缓存中的技术背景 在早期的Web开发过程中,特别是针对Internet Explorer(IE)浏览器时,开发者经常需要处理浏览器缓存的问题。这是因为浏览器缓存可以显著提高网页加载速度,但...

    js中的小技巧.doc

    以下是一些JS中的实用小技巧: 1. **`document.write`**:这是JavaScript中最基本的输出方法,用于向HTML文档中插入动态内容。例如,`document.write("Hello, World!");`会在页面上显示“Hello, World!”。 2. **...

    精彩编程与编程技巧-判断是否在vb6环境下运行...

    #### 一、精彩编程与编程技巧——判断程序是否在VB6环境下运行 在软件开发过程中,特别是在使用Visual Basic (VB) 进行编程时,有时需要编写一段代码来检测当前程序是否运行在特定的环境中。这对于确保程序兼容性和...

    Java定义栈结构,并实现入栈、出栈操作完整示例

    本文主要介绍了Java定义栈结构,并实现入栈、出栈操作,结合完整实例形式分析了java数据结构中栈的定义、以及入栈、出栈、栈是否为空判断、栈大小计算、打印栈元素等相关操作技巧。 一、栈结构定义 在 Java 中,栈...

    精彩编程与编程技巧-获得分区信息并判断是否有CD...

    根据提供的文件信息,本文将详细解释如何通过编程获取指定驱动器的分区信息,并进一步判断该驱动器是否为CD-ROM以及是否插入了光盘。 ### 一、获取分区信息 #### 1.1 函数声明 在VBScript或VBA中,获取分区信息...

    powerbuilde小技巧PB小技巧.doc

    ### PowerBuilder 小技巧知识点详解 #### 一、在PowerBuilder中如何像资源管理器那样双击打开文件? **知识点1:使用API函数ShellExecuteA实现文件打开** 在PowerBuilder中,想要像Windows资源管理器那样通过双击...

    js中的小技巧,十分的实用

    以下是一些关于JS的实用小技巧,对于初学者来说,掌握这些知识点将有助于提升编程效率和理解力。 1. `document.write("")`:这是一个常用的输出语句,常用于在页面加载时动态插入HTML内容。 2. 注释:JS支持单行...

    C#net编程的七个小技巧

    现在可以直接用`myString.IsNullOrEmpty()`来判断字符串是否为空。 6. **枚举与switch-case搭配使用** 枚举是常量集合,与switch-case语句配合使用,可以使代码更清晰、更易于维护。例如: ```csharp switch ...

Global site tag (gtag.js) - Google Analytics