Соответствие непробельным в Java - PullRequest
6 голосов
/ 29 сентября 2010

Я хотел бы обнаружить строки, в которых есть непробельные символы.Сейчас я пытаюсь:

!Pattern.matches("\\*\\S\\*", city)

Но, похоже, это не работает.У кого-нибудь есть предложения?Я знаю, что могу обрезать строку и проверить, равна ли она пустой строке, но я бы предпочел сделать это следующим образом

Ответы [ 4 ]

9 голосов
/ 29 сентября 2010

Что именно, по вашему мнению, соответствует регулярному выражению?

Попробуйте

Pattern p = Pattern.compile( "\\S" );
Matcher m = p.matcher( city );
if( m.find() )
//contains non whitespace

Метод find будет искать частичные совпадения, а не полное совпадение.Похоже, это поведение, которое вам нужно.

3 голосов
/ 14 июля 2013
city.matches(".*\\S.*")

или

Pattern nonWhitespace = Pattern.compile(".*\\S.*")
nonWhitspace.matches(city)
3 голосов
/ 29 сентября 2010

\S (верхний регистр s) соответствует непробельному пространству, поэтому вам не нужно отменять результат matches.

Также попробуйте метод Матчера find вместо Pattern.matches.

1 голос
/ 29 сентября 2010

Гуава CharMatcher класс хорош для такого рода вещей:

boolean hasNonWhitespace = !CharMatcher.WHITESPACE.matchesAllOf(someString);

Это соответствует пробелу в соответствии со стандартом Unicode вместо использования Character.isWhitespace() метода Java ... CharMatcher.JAVA_WHITESPACE соответствует в соответствии с этим.

...