验证字符串的最佳方法是空或null

时间:2015-09-14 14:20:18

标签: java regex string trim is-empty

我确信之前必须以不同的方式提出这一点 - 因为isEmptyOrNull如此常见,但人们以不同的方式实现它。但我对最佳可用方法有好奇的查询,这对于内存和性能都有好处。

1)下面没有考虑所有空格,例如空XML标记

return inputString==null || inputString.length()==0;

2)下面一个小心,但修剪可以吃一些性能+记忆

return inputString==null || inputString.trim().length()==0;

3)转换为模式匹配器(仅当字符串非零长度时调用)

private static final Pattern p = Pattern.compile("\\s+");

return inputString==null || inputString.length()==0 || p.matcher(inputString).matches();

4)还有其他吗?

14 个答案:

答案 0 :(得分:24)

Useful method from Apache Commons:

 org.apache.commons.lang.StringUtils.isBlank(String str)

https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#isBlank(java.lang.String)

答案 1 :(得分:16)

要检测字符串是空还是空,您可以使用以下内容,而不在项目中包含任何外部依赖项,并且仍然保持代码简单/干净:

new \DateTime($constraint->max)

或者如果还需要检测空格:

if(myString==null || myString.isEmpty()){
    //do something
}

您可以轻松地将这些包装到实用程序方法中,以便更简洁,因为这些是非常常见的检查:

if(myString==null || myString.trim().isEmpty()){
    //do something
}

然后通过以下方法调用这些方法:

public final class StringUtils{ private StringUtils() { } public static bool isNullOrEmpty(string s){ if(s==null || s.isEmpty()){ return true; } return false; } public static bool isNullOrWhiteSpace(string s){ if(s==null || s.trim().isEmpty()){ return true; } return false; } }

if(StringUtils.isNullOrEmpty(myString)){...}

答案 2 :(得分:14)

只是为了显示java 8的移除空值的立场。

String s = Optional.ofNullable(myString).orElse("");
if (s.trim().isEmpty()) {
    ...
}

如果可以使用Optional<String>,则有意义。

答案 3 :(得分:7)

来自 Google Guava 的这个可以查看&#34; null和空字符串&#34;在同一时间。

Strings.isNullOrEmpty("Your string.");

使用Maven添加依赖关系

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>20.0</version>
</dependency>

使用Gradle

dependencies {
  compile 'com.google.guava:guava:20.0'
}

答案 4 :(得分:2)

Apache Commons Lang有StringUtils.isEmpty(String str)方法,如果参数为空或null

,则返回true

答案 5 :(得分:1)

Optional.ofNullable(label)
.map(String::trim)
.map(string -> !label.isEmpty)
.orElse(false)

OR

TextUtils.isNotBlank(label);

最后一个解决方案将检查是否为null并同时修剪str

答案 6 :(得分:1)

在大多数情况下,来自apache commons库的StringUtils.isBlank(str)会解决它。但是如果存在这种情况,检查的输入字符串在引号内具有空值,则无法检查这种情况。

举个例子,我有一个输入对象,它使用String.valueOf(obj) API转换为字符串。如果obj引用为null,则String.valueOf返回“null”而不是null。

当您尝试使用StringUtils.isBlank("null")时,API会失败,您可能必须检查此类用例以确保您的验证正确。

答案 7 :(得分:1)

使用openJDK 11,您可以使用内部验证来检查String是否为null或只是空白

import jdk.internal.joptsimple.internal.Strings;
...

String targetString;
if (Strings.isNullOrEmpty(tragetString)) {}

答案 8 :(得分:0)

简单明了:

if (str == null || str.trim().length() == 0) {
    // str is empty
}

答案 9 :(得分:0)

springframework 库检查给定的String是否为空。

f(StringUtils.isEmpty("")) {
    //.... String is blank or null
}

答案 10 :(得分:0)

您可以使用Optional和Apache commons Stringutils库

Optional.ofNullable(StringUtils.noEmpty(string1)).orElse(string2);

此处将检查 string1 是否不为null且不为空,否则它将返回 string2

答案 11 :(得分:0)

还没有看到任何完全本地化的解决方案,所以这里是一个:

return str == null || str.chars().allMatch(Character::isWhitespace);

基本上,使用本机的Character.isWhitespace()函数。从那里,您可以实现不同程度的优化,具体取决于它的重要性(我可以向您保证,在99.99999%的用例中,不需要进一步的优化):

return str == null || str.length() == 0 || str.chars().allMatch(Character::isWhitespace);

或者,要使其达到最佳状态(但非常丑陋):

int len;
if (str == null || (len = str.length()) == 0) return true;
for (int i = 0; i < len; i++) {
  if (!Character.isWhitespace(str.charAt(i))) return false;
}
return true;

我想做的一件事:

Optional<String> notBlank(String s) {
  return s == null || s.chars().allMatch(Character::isWhitepace))
    ? Optional.empty()
    : Optional.of(s);
}

...

notBlank(myStr).orElse("some default")

答案 12 :(得分:0)

如果必须在同一验证中测试多个字符串,则可以执行以下操作:

import java.util.Optional;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class StringHelper {

  public static Boolean hasBlank(String ... strings) {

    Predicate<String> isBlank = s -> s == null || s.trim().isEmpty();

    return Optional
      .ofNullable(strings)
      .map(Stream::of)
      .map(stream -> stream.anyMatch(isBlank))
      .orElse(false);
  }

}

因此,您可以使用StringHelper.hasBlank("Hello", null, "", " ")StringHelper.hasBlank("Hello")之类的通用形式。

答案 13 :(得分:0)

我们可以利用以下

Optional.ofNullable(result).filter(res -> StringUtils.isNotEmpty(res))
            .ifPresent( s-> val.set(s));