24

在Java中,我有以下方法:

public String normalizeList(List<String> keys) {
    // ...
}

我想检查一下keys

  • 不是null它自己;和
  • 不为空(size() == 0);和
  • 没有任何String元素是null; 和
  • 没有任何String为空的元素 ("")

这是一个实用方法,将进入“commons”风格的 JAR(类将类似于DataUtils)。这是我所拥有的,但我认为它不正确:

public String normalize(List<String> keys) {
    if(keys == null || keys.size() == 0 || keys.contains(null) || keys.contains(""))
        throw new IllegalArgumentException("Bad!");

    // Rest of method...
}

我相信最后 2 次检查是不正确的,keys.contains(null)并且keys.contains("")可能会引发运行时异常。我知道我可以遍历if语句中的列表,并在那里检查空值/空值,但我正在寻找一个更优雅的解决方案(如果存在)。

4

6 回答 6

40
 keys.contains(null) || keys.contains("")

true如果您的列表包含 null(或)空字符串,则不会引发任何运行时异常和结果。

于 2012-08-16T17:46:57.923 回答
7

keys.contains(null)这对我来说看起来很好,你会得到的唯一例外keys.contains("")是如果keys它本身是null.

但是,由于您首先检查它,因此您知道此时keysis not null,因此不会发生运行时异常。

于 2012-08-16T17:48:01.587 回答
4

使用 java 8,您可以执行以下操作:

public String normalizeList(List<String> keys) {
    boolean bad = keys.stream().anyMatch(s -> (s == null || s.equals("")));
    if(bad) {
        //... do whatever you want to do
    }
}
于 2019-01-10T18:59:42.007 回答
0

我不确定,但 ApacheCommon 库中没有任何帮助类可以做到这一点吗?就像你有一个字符串的 isEmpty 并且你在 ApacheCommons 库中有 isNullOrEmpty

于 2012-08-16T18:01:03.767 回答
0

一次检查清单

  public static boolean empty(String s) {
    if (s == null)
      return true;
    else if (s.length() == 0)
      return true;
    return false;
  }  

  public String normalize(List<String> keys) {
    if(keys == null || keys.size() == 0)
        throw new IllegalArgumentException("Bad!");
    for (String key: keys)
      if(empty(key))
         throw new IllegalArgumentException("Empty!");

    // Rest of method...
    return null;
  }
于 2012-08-16T18:10:26.777 回答
0

您还可以使用 Apache StringUtils 并检查字符串是否为空白,这将检查 null、Emptystring 并且还会修剪您的值。

if(StringUtils.isBlank(listItemString)){...}

在此处查看 StringUtils 文档:

https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html

于 2017-08-28T10:09:55.130 回答