StringUtils.isBlank vs. Regexp - PullRequest
       31

StringUtils.isBlank vs. Regexp

0 голосов
/ 17 ноября 2010

Итак, я просматриваю какой-то устаревший код и нахожу экземпляр, где они делают это:

if ((name == null) || (name.matches("\\s*")))
   .. do something

На данный момент не обращайте внимания на то, что вызов .matches(..) каждый раз создает новый Pattern и Matcher (ух), ноесть ли причина не менять эту строку на:

if (StringUtils.isBlank(name))
   ..do something

Я почти уверен, что регулярное выражение просто совпадает, если строка является пробелом.Будут ли StringUtils перехватывать все те же условия, что и первый?

Ответы [ 3 ]

4 голосов
/ 17 ноября 2010

Да, 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;
}
1 голос
/ 17 ноября 2010

Вы корректны при проверке регулярного выражения, если строка содержит больше нуля или больше пробелов.

Преимущества отсутствия регулярного выражения

  • Регулярные выражения загадочны для многих людей, что делает их менее читабельными
  • И, как вы правильно заметили .matches() имеет нетривиальные накладные расходы
0 голосов
/ 08 июля 2013
 /**
 * 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());
}
...