我想检测其中包含非空白字符的字符串。现在我正在尝试:
!Pattern.matches("\\*\\S\\*", city)
但它似乎没有起作用。有没有人有什么建议?我知道我可以修剪字符串并测试它是否等于空字符串,但我宁愿这样做
答案 0 :(得分:8)
你认为正则表达式到底匹配的是什么?
尝试
Pattern p = Pattern.compile( "\\S" );
Matcher m = p.matcher( city );
if( m.find() )
//contains non whitespace
find
方法将搜索部分匹配,而不是完全匹配。这似乎是你需要的行为。
答案 1 :(得分:3)
\S
(大写s)匹配非空格,因此您不必否定matches
的结果。
另外,尝试使用匹配器的方法find
而不是Pattern.matches
。
答案 2 :(得分:3)
city.matches(".*\\S.*")
或
Pattern nonWhitespace = Pattern.compile(".*\\S.*")
nonWhitspace.matches(city)
答案 3 :(得分:1)
Guava的CharMatcher课程很适合这类事情:
boolean hasNonWhitespace = !CharMatcher.WHITESPACE.matchesAllOf(someString);
根据Unicode标准匹配空白,而不是使用Java的Character.isWhitespace()
方法... CharMatcher.JAVA_WHITESPACE
匹配。