场景:
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。
我希望匹配器对于 "WhiteSpace"
为 true,对于 "WhiteSpace"
为 false(两个空格)
我希望 matcher2 对于 :"WhiteSpace"
为 true。
我想做的事情是;
我有一个字符串“两个空格”
。
下面两个 if 语句都为 true。 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)");
关于Java模式的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40474040/