情景:
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()
都是正确的。但是matcher.find()
应该是假的,matcher2.find()
应该是真的。
我希望匹配器对" WhiteSpace"
为真,对" WhiteSpace"
(两个空格)为假
我希望matcher2适用于:" WhiteSpace"
。
我想做的是;
我有一个字符串" two whitespaces"
以下两个if语句都是真的。 matcher
应该是假的。
matcher2
应该是真的。
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
}
答案 0 :(得分:1)
如果你想确保在一个空格之后没有其他空格,但你实际上并不想要包含你将在匹配中测试的第二个字符(无论它是否是空格),你可以使用negative lookahead机制(?!..)
。
如果模式看起来没有其他空格,那么只能在行首处匹配空格的模式
Pattern whitespace = Pattern.compile("^\\s(?!\\s)");
这可以适用于空格的任何数字
Pattern whitespace = Pattern.compile("^\\s{3}(?!\\s)");
答案 1 :(得分:1)
这里的模式可能过度*。使用Character.isWhitespace
并获得更简单的代码:
String in = " your input here";
int wsPrefix=0;
for ( ; wsPrefix < in.length() && Character.isWhitespace(in.charAt(wsPrefix)) ;
wsPrefix++ ) {}
System.out.println("wsPrefix = " + wsPrefix);
*据说:
&#34;有些人在面对问题时会思考 “我知道,我会使用正则表达式。”现在他们有两个问题。 - Jaimie Zawinski, 1997