【发布时间】:2020-11-25 16:09:50
【问题描述】:
考虑以下检查输入是否为格式的代码:<tag>contents</tag>
如果以上述形式输入,则在标签之间打印内容,否则打印无。
例如:
-
输入:
<h1>Nayeem loves counseling</h1>输出:Nayeem 喜欢咨询 -
输入:
<h1><h1>Sanjay has no watch</h1></h1><par>So wait for a while</par>输出:桑杰没有手表 所以请稍等 -
输入:
<Amee>safat codes like a ninja</amee>输出:无
String line = scan.nextLine();
boolean matchFound = false;
Pattern r = Pattern.compile("<(.+)>([^<]+)</\\1>");
Matcher m = r.matcher(line);
while(m.find()) {
System.out.println(m.group(2));
matchFound = true;
}
if(!matchFound) {
System.out.println("None");
}
这里 find() 返回布尔类型。我的问题是为什么 find() 应该与 while 循环一起使用?为什么我不能用“if”代替while? find 在内部如何工作?
【问题讨论】:
-
如果你使用
if,第二个输入示例只会打印一个结果(我认为)。如果您想找到所有匹配项,而不仅仅是第一个匹配项,while是必需的。 -
while 循环的主体运行零次或多次; if 语句的主体运行零次或一次。它们之间的选择取决于您希望找到多少匹配项。
标签: java regex find pattern-matching matcher