如何检查字符串是否包含' \ r' \吨' ' \ n' ...除了空格

时间:2016-12-29 01:25:51

标签: java regex

如何检查字符串是否包含所有' \ 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一样使用。

4 个答案:

答案 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表示各种水平空间。但在其他语言中,据我所知,它并不可用。