Java等价于c# String.IsNullOrEmpty()和String.IsNullOrWhiteSpace()
本文关键字:String IsNullOrWhiteSpace IsNullOrEmpty 等价于 Java | 更新日期: 2023-09-27 18:17:40
在c#中,我发现String类的两个静态方法非常有用:
- IsNullOrEmpty ()
- IsNullOrWhiteSpace ()
我在Java中找不到有效的代理,是否有类似的东西?
实际上我把这两个方法翻译成这样:
public static boolean isNullOrEmpty(String a) {
return a == null || a.isEmpty();
}
public static boolean isNullOrWhiteSpace(String a) {
return a == null || (a.length() > 0 && a.trim().length() <= 0);
}
这是在Java中翻译这些方法的最好方法吗?在Java中翻译这两个方法的最好方法是什么?
我不喜欢使用String。检查是否存在空白。它比你需要做更多的工作,因为它检查字符串的两端(即使在另一端发现非空白),并返回一个新的string对象。所以我更愿意实现一个方法来检查空格
所以我的建议(如果你自己实现的话)如下:
public static boolean isNullOrEmpty(String s) {
return s == null || s.length() == 0;
}
public static boolean isNullOrWhitespace(String s) {
return s == null || isWhitespace(s);
}
private static boolean isWhitespace(String s) {
int length = s.length();
if (length > 0) {
for (int i = 0; i < length; i++) {
if (!Character.isWhitespace(s.charAt(i))) {
return false;
}
}
return true;
}
return false;
}
或者从String中得到提示。在trim的实现中,您可以使用字符比较而不是character . iswhitespace ():
// checking for whitespace like String.trim() does
private static boolean isWhitespace(String s) {
int length = s.length();
if (length > 0) {
for (int i = 0; i < length; i++) {
if (s.charAt(i) > ' ') {
return false;
}
}
return true;
}
return false;
}
最后,我会考虑在每次迭代中检查字符串的两端,向内步进。这将最小化获得答案所需的迭代次数,无论空格是否存在于字符串的前面或末尾。
private static boolean isWhitespace(String s) {
int length = s.length();
if (length > 0) {
for (int start = 0, middle = length / 2, end = length - 1; start <= middle; start++, end--) {
if (s.charAt(start) > ' ' || s.charAt(end) > ' ') {
return false;
}
}
return true;
}
return false;
}
你总是可以通过。net反射器或其他反编译器看到c#的实现:
public static bool IsNullOrEmpty(string value)
{
if (value != null)
return value.Length == 0;
else
return true;
}
和
public static bool IsNullOrWhiteSpace(string value)
{
if (value == null)
return true;
for (int index = 0; index < value.Length; ++index)
{
if (!char.IsWhiteSpace(value[index]))
return false;
}
return true;
}
你可以这样试试
import org.apache.commons.lang.StringUtils;
public class CheckEmptyStringExample
{
public static void main(String[] args)
{
String string1 = "";
String string2 = "'t'r'n";
String string3 = " ";
String string4 = null;
String string5 = "Hi";
System.out.println("'nString one is empty? " + StringUtils.isBlank(string1));
System.out.println("String one is not empty? " + StringUtils.isNotBlank(string1));
System.out.println("'nString two is empty? " + StringUtils.isBlank(string2));
System.out.println("String two is not empty?" + StringUtils.isNotBlank(string2));
System.out.println("'nString three is empty?" + StringUtils.isBlank(string3));
System.out.println("String three is not empty?" + StringUtils.isNotBlank(string3));
System.out.println("'nString four is empty?" + StringUtils.isBlank(string4));
System.out.println("String four is not empty?" + StringUtils.isNotBlank(string4));
System.out.println("'nString five is empty?" + StringUtils.isBlank(string5));
System.out.println("String five is not empty?" + StringUtils.isNotBlank(string5));
}
}
看看apache commons lang中的StringUtils
类
如果导入com.google.common.base.Strings
,则有Strings.isNullOrEmpty()
isNullOrEmpty(@Nullable String string)
apache.commons.lang.StringUtils
是答案。
isBlank ()
isEmpty ()
在JDK11中,String
类有一个isBlank
方法,
如果字符串为空或只包含空白,则返回true代码点,否则为false。
虽然它不检查是否为空,但它肯定更接近c#的string.IsNullOrWhiteSpace
。
你现在可以这样做:
var isNullOrWhiteSpace = str == null || str.isBlank();
或创建一个辅助方法:
public static boolean isNullOrWhitespace(String s) { return s == null || str.isBlank(); }
Apache Commons Lang为字符串提供了一组方便的实用程序:http://commons.apache.org/lang/api-release/org/apache/commons/lang3/StringUtils.html
当然,如果你不想为依赖关系而烦恼,你的实现就足够了。
这应该更简单,更容易理解。
public static boolean isNullOrEmpty(String s) {
return s == null || s.length() == 0;
}
public static boolean isNullOrWhitespace(String s) {
return isNullOrEmpty(s) ? true : isNullOrEmpty(s.trim());
}
for isnullorempty: return a == null || a.length == 0;
对于isnullorwhitespace,您必须检查每个字符,直到找到非空白字符(ascii或unicode)