【问题标题】:One step check for null value & emptiness of a string一步检查空值和字符串是否为空
【发布时间】:2009-12-16 08:58:51
【问题描述】:

我有一个 setter 方法。

然后当另一个(比如生成)方法运行时,我需要检查我的字段的值。 因此,对于 String 属性,我需要知道它是否包含该值或是否未设置。 所以它可能是 null、"" 或有意义的东西,有 3 种可能性。 首先检查空值是相当无聊的:

if (s != null)

然后对于一个空字符串

if (!s.isEmpty())

这里有一步检查吗?你可以告诉我,我可以用空字符串初始化我的字符串字段。 [这很常见吗? ] 但是如果有人将空值传递给 setter 方法 setS 怎么办? 那么在对那个对象做某事之前,我们是否总是需要检查 Object 的值是否为 null 呢?

嗯,是的,setter 方法可以检查它的值,如果字段为 null,getter 方法也可以返回非 null 值。但它是唯一的解决方案吗?对于程序员来说,getter 和 setter 的工作量太大了!

【问题讨论】:

  • 是的 Apache 库。为什么,它不在标准的 Java 发行版中?
  • 需要考虑的事情:null表示未设置,“”表示设置为空。
  • 在这里同意帕特。有时这似乎只是不必要的簿记,但它们在语义上是不同的。如果成员为空,则表示“没有值”,而空字符串“有值;空字符串”。基于这一事实,方法通常具有不同的行为(通过设计)。
  • 很抱歉向 cmets 发送垃圾邮件,但由于它有些相关,您可以通过使用字符串来避免对非空字符串的检查空值和比较测试-literal 进行测试(字符串文字仍然是字符串),例如"CheesySafeCompare".equals( someString ) 像您想象的那样工作,但不会抛出 NullPointerException。

标签: java string


【解决方案1】:

公共库,StringUtils.isBlank()StringUtils.isEmtpy()

isEmpty 等价于

s == null || s.length() == 0

isBlank 等价于

s == null || s.trim().length() == 0

【讨论】:

  • 有点意思,你描述的是isNotBlank & isNotEmpty :)
【解决方案2】:
if(s != null && !s.isEmpty()){
// this will work even if 's' is NULL
}

【讨论】:

  • 虽然这可以防止空异常,但这不是一个等效的测试:如果 s 为空,则表达式解析为真。这是一种测试 s 是否包含空字符串的 null 安全方法,它不测试 s 是否为空且 not null。区别很重要!
【解决方案3】:

在 jakarta commons 中有一个 StringUtils.isEmpty(String)。

【讨论】:

    【解决方案4】:

    使用org.apache.commons.lang.StringUtils,方法StringUtils.isNotBlank检查nullity和emptiness。

    【讨论】:

      【解决方案5】:

      com.google.guava添加maven依赖

      然后在你的代码中:

      import com.google.common.base.Strings;
      
      if(!Strings.isNullOrEmpty(s)) {
        // Do stuff here
      }
      

      【讨论】:

        【解决方案6】:

        如果你是做android开发的,可以使用:

        TextUtils.isEmpty (CharSequence str) 
        

        在 API 级别 1 中添加 如果字符串为 null 或 0 长度,则返回 true。

        【讨论】:

          猜你喜欢
          • 2015-06-12
          • 1970-01-01
          • 2015-06-05
          • 1970-01-01
          • 2017-08-19
          • 1970-01-01
          • 2014-09-22
          • 1970-01-01
          相关资源
          最近更新 更多