Я использую регулярное выражение для поиска очень специфического шаблона для каталога размером около 106 МБ. Это займет около 10 секунд.Неудовлетворительная производительность поиска шаблона
Есть ли что-нибудь, что я могу сделать для повышения производительности?
package com.JFileReader;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileData {
public static void main(String[] args) {
File dir = new File("/Users/me/Desktop/");
if(dir.isFile()) { handleFile(dir); }
if(dir.isDirectory()) { handleDir(dir); }
}
public static void handleFile(File aFile) {
String regex = "[a-zA-Z]+[.][a-zA-Z]+[@][a-zA-Z]+[.][a-zA-Z]+";
Pattern pattern = Pattern.compile(regex);
try {
BufferedReader br = new BufferedReader(new FileReader(aFile));
Matcher m;
String line;
while ((line = br.readLine()) != null) {
m = pattern.matcher(line);
if (m.find()) {
System.out.println("Found: " + aFile);
}
}
br.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
public static void handleDir(File dir) {
for (File file : dir.listFiles()) {
if(file.isFile()) { handleFile(file); }
if(file.isDirectory()) { handleDir(file); }
}
}
}
Для поиска шаблона следует рассмотреть возможность использования KMP. См. Http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm – Algorithmist