Подтвердить что ты не робот

Java-эквивалент С# String.IsNullOrEmpty() и String.IsNullOrWhiteSpace()

Работа в С# я нашел очень полезные два статических метода класса 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?

4b9b3361

Ответ 1

Я бы предпочел не использовать String.trim, чтобы проверить наличие пробелов. Он выполняет больше работы, чем вам нужно, так как он проверяет оба конца строки (даже если не-whitespace был найден на другом конце) И он возвращает новый объект 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;
}

Ответ 2

Вы всегда можете увидеть реализацию С# через рефлектор .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;
}

Ответ 3

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

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

Ответ 4

Посмотрите класс StringUtils в apache commons lang.

Ответ 5

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

isNullOrEmpty(@Nullable String string)

Ответ 8

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

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

Ответ 9

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

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

Хотя он не проверяет недействительность, он, безусловно, ближе к string.IsNullOrWhiteSpace С#. string.IsNullOrWhiteSpace.

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

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

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

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

Ответ 10

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