我确信之前必须以不同的方式提出这一点 - 因为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)还有其他吗?
答案 0 :(得分:24)
Useful method from Apache Commons:
org.apache.commons.lang.StringUtils.isBlank(String str)
答案 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
答案 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));