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?
Ответы
Ответ 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)
Ответ 6
Apache Commons Lang имеет удобный набор утилит для строк: http://commons.apache.org/lang/api-release/org/apache/commons/lang3/StringUtils.html
Конечно, вашей реализации может быть достаточно, если вы не хотите беспокоиться о зависимостях.
Ответ 7
apache.commons.lang.StringUtils
- ответ.
isBlank()
isEmpty()
Ответ 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)