Stringutils.isblank vs. regexp
-
11-10-2019 - |
Вопрос
Поэтому я просматриваю какой -то устаревший код и нахожу экземпляр, где они делают это:
if ((name == null) || (name.matches("\\s*")))
.. do something
Игнорировать на данный момент, что .matches(..)
Call создает новый шаблон и маттер каждый раз (UHG), но есть ли какие -либо причины не менять эту линию на:
if (StringUtils.isBlank(name))
..do something
Я почти уверен, что регулярность просто совпадает, если строка - все пробелы. Пойдут ли StringUtils все те же условия, что и первые?
Решение
Да, StringUtils.isBlank(..)
сделает то же самое, и это лучший способ. Взгляните на код:
public static boolean isBlank(String str) {
int strLen;
if ((str == null) || ((strLen = str.length()) == 0))
return true;
int strLen;
for (int i = 0; i < strLen; ++i) {
if (!(Character.isWhitespace(str.charAt(i)))) {
return false;
}
}
return true;
}
Другие советы
Вы правы в тестах регулярного выражения, если строка более нулевой или более символов белого пространства.
Преимущества не использовать регулярное выражение
- Регулярные выражения загадочны для многих людей, что делает его менее читабельным
- И, как вы правильно указали
.matches()
имеет не тривиальные накладные расходы
/**
* Returns if the specified string is <code>null</code> or the empty string.
* @param string the string
* @return <code>true</code> if the specified string is <code>null</code> or the empty string, <code>false</code> otherwise
*/
public static boolean isEmptyOrNull(String string)
{
return (null == string) || (0 >= string.length());
}
Не связан с StackOverflow