3 回答

TA貢獻1776條經驗 獲得超12個贊
有人可以告訴我我做錯了什么嗎?
您假設您將從匹配中已使用的文本中獲取匹配項。你不會的。
您可以使用前瞻性斷言來做到這一點:
Pattern p = Pattern.compile("1(?=1111)");
(這意味著“找到一個在四個 1 之前的 1”,而不是“找到五個 1”)
Ideone demo
但是這樣做更容易indexOf:
int prev = -1;
while ((prev = in.indexOf("11111", prev + 1)) != -1) {
System.out.println(prev + " ");
}

TA貢獻1866條經驗 獲得超5個贊
Andy Turner 對您的問題的診斷是正確的,他的建議也很好,但是如果您需要匹配正則表達式而不是固定字符串,您仍然可以讓它工作。關鍵是它Matcher.find()有一個重載,它需要一個int指定的起始位置。如果將其設置為緊接上一場比賽的開始位置之后,您將獲得所需的結果,因為它會強制匹配器重新考慮使用之前的那些 1。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
String in = "111111111111111";
Pattern p = Pattern.compile("(11111)");
Matcher m = p.matcher(in);
int pos = 0;
while (m.find(pos)) {
System.out.print(m.start() + " ");
pos = m.start() + 1;
}
}
}
添加回答
舉報