Java-эквивалент c # String.IsNullOrEmpty () и String.IsNullOrWhiteSpace () - PullRequest
34 голосов
/ 12 декабря 2011

Работая в 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 ]

21 голосов
/ 12 декабря 2011

Я бы предпочел не использовать 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;
}
13 голосов
/ 12 декабря 2011

Вы всегда можете увидеть реализацию c # через .net рефлектор или другой декомпилятор:

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;
}
9 голосов
/ 12 декабря 2011

вы можете попробовать вот так

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)); 
  }
}
6 голосов
/ 12 декабря 2011

Посмотрите на класс StringUtils в Apache Commons Lang.

4 голосов
/ 27 февраля 2015

Если вы импортируете com.google.common.base.Strings, у вас есть Strings.isNullOrEmpty()

isNullOrEmpty(@Nullable String string)
1 голос
/ 12 декабря 2011

apache.commons.lang.StringUtils ответ.

ISBLANK ()

IsEmpty ()

1 голос
/ 12 декабря 2011

Apache Commons Lang имеет разнообразный удобный набор утилит для строк: http://commons.apache.org/lang/api-release/org/apache/commons/lang3/StringUtils.html

Конечно, вашей реализации может быть достаточно, если вы не хотите беспокоиться о зависимостях.

0 голосов
/ 01 декабря 2018

В JDK11 класс String имеет метод isBlank, который:

Возвращает true, если строка пуста или содержит только пробельные кодовые точки, в противном случае - false.

Хотя он не проверяет на ничтожность, он, безусловно, ближе к string.IsNullOrWhiteSpace в C #.

Теперь вы можете сделать:

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

или создать вспомогательный метод:

public static boolean isNullOrWhitespace(String s) { return s == null || str.isBlank(); }
0 голосов
/ 25 июля 2017

Это должно быть намного проще и понятнее.

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());
}
0 голосов
/ 12 декабря 2011

для isnullorempty: вернуть == ноль || длина == 0;
для isnullorwhitespace вы должны проверять каждый отдельный символ, пока не найдете непробельный (ascii или unicode)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...