我想在zip
打印出第二次出现text
的位置,如果至少两次不出现,则打印-1。
public class UdaciousSecondOccurence {
String text = "all zip files are zipped";
String text1 = "all zip files are compressed";
String REGEX = "zip{2}"; // atleast two occurences
protected void matchPattern1(){
Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(text);
while(m.find()){
System.out.println("start index p" +m.start());
System.out.println("end index p" +m.end());
// System.out.println("Found a " + m.group() + ".");
}
matchPattern1()
的输出
开始索引p18
结束指数p22
但是它没有为模式text1
打印任何东西 - 我使用了类似的方法用于第二种模式 -
答案 0 :(得分:1)
text1
与正则表达式zip{2}
不匹配,因此while循环从不迭代,因为没有匹配项。
该表达式尝试匹配文字zipp
,其中包含text
但不包含text1
。 regexr
如果您想匹配第二次出现,我建议您使用捕获组:.*zip.*?(zip)
示例强>
String text = "all zip files are zip";
String text1 = "all zip files are compressed";
String REGEX = ".*zip.*?(zip)";
Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(text);
if(m.find()){
System.out.println("start index p" + m.start(1));
System.out.println("end index p" + m.end(1));
}else{
System.out.println("Match not found");
}
答案 1 :(得分:1)
使用以下可能适合您的代码
public class UdaciousSecondOccurence {
String text = "all zip files are zipped";
String text1 = "all zip files are compressed";
String REGEX = "zip{2}"; // atleast two occurences
protected void matchPattern1(){
Pattern p = Pattern.compile(REGEX);
Matcher m = p.matcher(text);
if(m.find()){
System.out.println("start index p" +m.start());
System.out.println("end index p" +m.end());
// System.out.println("Found a " + m.group() + ".");
}else{
System.out.println("-1");
}
}
public static void main(String[] args) {
UdaciousSecondOccurence uso = new UdaciousSecondOccurence();
uso.matchPattern1();
}
}
答案 2 :(得分:0)
zip{2}
匹配字符串zipp
- {2}
仅适用于紧接在前的元素。 ' P'
这不是你想要的。
您可能只想使用zip
作为正则表达式,并将出现次数计算在其周围的代码中。
答案 3 :(得分:0)
为什么不两次使用String.indexOf
?
String text = "all zip files are zipped";
String text1 = "all zip files are compressed";
int firstOccurrence = text.indexOf("zip");
int secondOccurrence = text.indexOf("zip", firstOccurrence + 1);
System.out.println(secondOccurrence);
firstOccurrence = text1.indexOf("zip");
secondOccurrence = text1.indexOf("zip", firstOccurrence + 1);
System.out.println(secondOccurrence);
<强>输出强>
18
-1
答案 4 :(得分:0)
第二次,while(m.find())
内的语句永远不会被执行。因为find()
无法找到任何匹配
答案 5 :(得分:0)
您需要一个或两个模式匹配。尝试使用正则表达式zip{1,2}
,
String REGEX = "zip{1,2}";
答案 6 :(得分:0)
如果它必须匹配两次,而不是使用while循环,我会使用正则表达式"zip"
(一次,而不是两次)来编码它:
if (m.find() && m.find()) {
// found twice, Matcher at 2nd match
} else {
// not found twice
}
P.S。 text1没有两个拉链
答案 7 :(得分:0)
可能有两个原因: 第1名:Text1不包含两个&#39; zip&#39;。 第二:你需要添加一段代码来打印&#39; -1&#39;找不到匹配。例如如果m.find = true则打印索引 否则打印-1