场景:
Pattern whitespace = Pattern.compile("^\\s");
matcher = whitespace.matcher(" WhiteSpace");
Pattern whitespace2 = Pattern.compile("^\\s\\s");
matcher2 = whitespace2.matcher(" WhiteSpace");
我正在尝试在一行的开头获取空白。我想获得准确的空白匹配器数量。我的字符串是
" WhiteSpace"
。问题是
matcher
和matcher2
都在此字符串上工作。我想要的是:
仅获得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)");