Java 相当于 c# String.IsNullOrEmpty() 和 String.IsNullOrWhiteSpace()

2022-09-01 02:33:12

在c#中工作,我发现String类的两个静态方法非常有用:

我在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中翻译这两种方法的最佳方法是什么?


答案 1

我宁愿不使用String.trim来检查是否存在空格。它正在做的工作比你需要的多,因为它检查字符串的两端(即使在另一端找到非空格),并返回一个新的 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的实现中得到提示,你可以使用字符比较而不是Charact.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;
}

答案 2

你总是可以通过.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;
}