场景:

Pattern whitespace = Pattern.compile("^\\s");
matcher = whitespace.matcher("  WhiteSpace");

Pattern whitespace2 = Pattern.compile("^\\s\\s");
matcher2 = whitespace2.matcher("  WhiteSpace");


我正在尝试在一行的开头获取空白。我想获得准确的空白匹配器数量。我的字符串是" WhiteSpace"
问题是matchermatcher2都在此字符串上工作。

我想要的是:
仅获得1个空格的模式,但该模式不起作用
用于2个空格字符串。在下面的情况下,matcher.find()matcher2.find()均为true。但是matcher.find()应该为false,matcher2.find()应该为true。

我希望Matcher对于" WhiteSpace"为true,对于" WhiteSpace"为false(两个空格)
我希望matcher2对于:" WhiteSpace"是正确的。



我想做的是
我有一个字符串" two whitespaces"
在两个if陈述均成立的情况下。 matcher应该为false。
matcher2应该为true。

Pattern whitespace = Pattern.compile("^\\s");
matcher = whitespace.matcher("  two whitespaces");

Pattern whitespace2 = Pattern.compile("^\\s\\s");
matcher2 = whitespace2.matcher("  two whitespaces");

if(matcher.find()==true){
    //XXXXXXXXXXX
} else if(matcher2.find()==true){
    //YYYYYYYYYYY
}

最佳答案

如果要确保在一个空格之后没有另一个空格,但实际上并不想包含要在匹配中测试的第二个字符(无论是否为空格),都可以使用negative lookahead机制(?!..)

因此,如果行之后没有其他空格,则只能在行首匹配空格的模式

Pattern whitespace = Pattern.compile("^\\s(?!\\s)");


可以按空格调整为任意数量

Pattern whitespace = Pattern.compile("^\\s{3}(?!\\s)");

10-08 02:57