如何检查字符串是否包含所有' \ r' \吨' ' \ n' ...除了空格?
例如,String b = "a b"
,Character.isWhiteSpace(char c)
。我想为字符串a返回true,对于字符串b返回false。
我知道有Pattern.compile("\\s").matcher(string).find()
和Character.isWhiteSpace(char c)
。但他们都考虑到了空间('')。我想要的是找出所有被Pattern.compile
方法视为空格的转义字符,除了' &#39 ;.
而且我不想通过char检查char,如果有正确的正则表达式,那将是最好的,我可以像@PathVariable
一样使用。
答案 0 :(得分:3)
喜欢这个吗?
@Test
public void testLines() {
assertTrue(Pattern.compile("[\n\r\t]").matcher("a\nb").find());
assertFalse(Pattern.compile("[\n\r\t]").matcher("a b").find());
}
答案 1 :(得分:2)
您可以使用[^\S ]
匹配除\S
(非空白)或(空格)之外的所有内容。
Pattern pattern = Pattern.compile("[^\\S ]");
String a = "a\nb";
String b = "a b";
System.out.println(pattern.matcher(a).find()); // true
System.out.println(pattern.matcher(b).find()); // false
答案 2 :(得分:1)
我认为当你说"所有' \ r' \吨' ' \ n' ...除了空格",你的意思是"除了U + 0020"之外的任何空白字符。 (其中U + 0020是一个简单的空间)。这是对的吗?
如果是这样,那么以下正则表达式(一般形式)应该起作用:
(?! )\s
这将匹配任何不是简单空格的空白字符。这个正则表达式使用negative lookahead。
编辑:
正如@Bubletan在their answer中陈述的那样,以下正则表达式也将起作用:
[^\S ]
这两个正则表达式都是等价的。这是因为(?! )\s ≣ "(is NOT the character U+0020) AND (is whitespace)"
和[^\S ] ≣ "is NOT (non-whitespace OR the character U+0020)
具有相同的真值表:
Let P(x) be the predicate "x is the character U+0020"
Let Q(x) be the predicate "x is whitespace"
P | Q | (¬P)∧Q | ¬(¬Q∨P)
–– ––– –––––––– ––––––––
T T F F
T F T T
F T F F
F F F F
虽然为了提高效率,您可能最好使用@ Bubletan的解决方案([^\S ]
)。外观通常比替代方案慢。
这是你如何实现它的:
// Create the pattern. (do only once)
Pattern pattern = Pattern.compile("[^\\S ]");
// Test an input string. (do for each input)
Matcher matcher = pattern.matcher(string);
boolean result = matcher.find();
然后, result
将指示string
是否包含除简单空格之外的任何空格。
答案 3 :(得分:0)
在Java中,使用[^\\h]+
。 \ h表示各种水平空间。但在其他语言中,据我所知,它并不可用。