如何检查一个字符串既不是 null
也不是空的?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
如何检查一个字符串既不是 null
也不是空的?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
Predicate<String> p = (s)-> ( s != null && !s.isEmpty());
p.test(string);
使用Apache StringUtils的isNotBlank方法,如下所示:
StringUtils.isNotBlank(str)
仅当字符串不为空且不为null时,它才会返回true。
Optional.ofNullable(str)
.filter(s -> !(s.trim().isEmpty()))
.ifPresent(result -> {
// your query setup goes here
});
org.apache.commons.lang3.StringUtils.isNotBlank()
或org.apache.commons.lang3.StringUtils.isNotEmpty
。这两者之间的选择基于您实际想要检查的内容。
isNotBlank()检查输入参数是否:如果您不想包含整个库,只需包含所需的代码。 您将不得不自己维护它; 但这是一个非常简单明了的功能。 在这里,它从commons.apache.org复制。
/**
* <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;
}
private boolean stringNotEmptyOrNull(String st) {
return st != null && !st.isEmpty();
}
测试使用相同条件句进行空字符串和null的比较:
if(!"".equals(str) && str != null) {
// do stuff.
}
如果 str
为 null,equals()
方法不会抛出 NullPointerException
异常,因为 Object.equals()
方法如果参数为 null
会返回 false。
另一种构造方法 str.equals("")
会抛出令人恐惧的 NullPointerException
异常。有些人可能认为在调用 equals()
方法时使用字符串字面量作为对象是一种不好的做法,但这样做可以达到预期效果。
str != null
,!"".equals(str)
已经完成了它的工作。 - amdev如果您正在使用Java 8并希望采用更多的函数式编程方法,您可以定义一个Function
来管理控制,然后在需要时重复使用它和apply()
。
具体实践方面,您可以将Function
定义为
Function<String, Boolean> isNotEmpty = s -> s != null && !"".equals(s)
apply()
方法来使用它,例如:String emptyString = "";
isNotEmpty.apply(emptyString); // this will return false
String notEmptyString = "StackOverflow";
isNotEmpty.apply(notEmptyString); // this will return true
Function
来检查String
是否为空,然后使用!
对其取反。Function
将如下所示:Function<String, Boolean> isEmpty = s -> s == null || "".equals(s)
然后,您只需调用apply()
方法即可使用它:
String emptyString = "";
!isEmpty.apply(emptyString); // this will return false
String notEmptyString = "StackOverflow";
!isEmpty.apply(notEmptyString); // this will return true
使用Java 8 Optional,你可以做到以下几点:
public Boolean isStringCorrect(String str) {
return Optional.ofNullable(str)
.map(String::trim)
.map(string -> !str.isEmpty())
.orElse(false);
}
正如seanizer所说,如果您想使用Apache StringUtils进行字符串操作,那么它非常出色。如果您想使用guava,请按照以下步骤操作:
public List<Employee> findEmployees(String str, int dep) {
Preconditions.checkState(StringUtils.isNotBlank(str), "Invalid input, input is blank or null");
/** code here **/
}
我还可以建议您使用列名而不是索引来引用结果集中的列,这将使您的代码更易于维护。
PreparedStatement
等代替通过字符串连接原语构建 SQL 查询。这样可以避免各种注入漏洞,而且更易读等。 - polygenelubricantsPredicate.<String>isEqual(null).or(String::isEmpty).negate()
,具体解释请参考这里。 - Alexander Ivanchenko