Java等价于c#String.IsNullOrEmpty()和String.IsNullOrWhiteSpace()

时间:2011-12-12 15:23:49

标签: c# java string

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

10 个答案:

答案 0 :(得分:21)

我不想使用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的实现中获取提示,您可以使用字符比较而不是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;
}

答案 1 :(得分:13)

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

答案 2 :(得分:9)

你可以这样尝试

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)); 
  }
}

答案 3 :(得分:6)

查看apache commons lang中的StringUtils类。

答案 4 :(得分:4)

如果您导入com.google.common.base.Strings,则可以 Strings.isNullOrEmpty()

isNullOrEmpty(@Nullable String string)

答案 5 :(得分:1)

Apache Commons Lang为字符串提供了多种实用工具:http://commons.apache.org/lang/api-release/org/apache/commons/lang3/StringUtils.html

当然,如果您不想打扰依赖项,那么您的实现就足够了。

答案 6 :(得分:1)

apache.commons.lang.StringUtils就是答案。

isBlank()

isEmpty()

答案 7 :(得分:0)

这应该更加简单易懂。

wget -r ftp://ftp-trace.ncbi.nlm.nih.gov/sra/sra-instant/reads/ByStudy/sra/SRP/SRP042/SRP042286/{SRR1299458,SRR1299466}

答案 8 :(得分:0)

JDK11 中,String类具有一种isBlank方法,

  

如果字符串为空或仅包含空格,则返回true   代码点,否则为假。

尽管它不检查无效性,但肯定更接近C#的string.IsNullOrWhiteSpace

您现在可以这样做:

var isNullOrWhiteSpace = str == null || str.isBlank();

或创建一个辅助方法:

public static boolean isNullOrWhitespace(String s) { return s == null || str.isBlank(); }

答案 9 :(得分:-1)

for isnullorempty:return a == null || a.length == 0;
对于isnullorwhitespace,您必须检查每个字符,直到找到非空白字符(ascii或unicode)