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