正如標題所說,我寫了一個java代碼來使用正則表達式來計算給定文件中的所有匹配項,當我運行代碼時,out與文件中的匹配。如果我將每個字符串分隔成一個新行,它會很好地工作。這裏是我的代碼:Java正則表達式不計算給定文件中的所有匹配
這是應該算方法:
private static int countOccurrences(String path, String regex) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher;
int count = 0;
try {
BufferedReader br = new BufferedReader(new FileReader(path));
String line;
while ((line = br.readLine()) != null) {
matcher = pattern.matcher(line);
if (matcher.find())
count++;
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return count;
}
下面是一個使用該方法的代碼:
String regex = "(00966|\\+966)\\d{9}";
int countNumbers = countOccurrences(fileContainsNumbers, regex);
這是我從讀文件:
Lorem Ipsum簡直就是假人+966111111111文字的印刷和 排版行業。+ 966222222222 Lorem Ipsum has一直是業界的 標準虛擬文本有史以來+966333333333自1500年以來,當一個 未知的打印機採取類型的廚房和加擾+966444444444 +96645789541063它製作一個類型樣本書。 +966569874514它不僅存活了五個世紀,而且還跳入電子排版 排版,其餘+966569874514基本不變。它是 推廣+966569874514在20世紀60年代隨着發佈Letraset 表包含Lorem Ipsum段落,最近與桌面 發佈軟件如Aldus PageMaker +966555555555包括 版本的Lorem Ipsum。
哦,我明白了,這就是爲什麼它在每行的第一場比賽中停止計數。但是這段代碼是否會遍歷整個文件?或者我必須在文件循環中使用另一個循環? – Chance
你爲什麼不試試呢?我認爲它應該工作。你看 - 你已經在循環該文件中的所有行。然後,您應該循環匹配器以計算PER線的匹配數。按照建議已經用WHILE替換IF添加你需要的內循環! – GhostCat
它工作完美,非常感謝你。我會盡量找到一個更好的方法來使用「一個循環」,而不是「嵌套循環」,如果可能的話。 標記爲答案;) – Chance