Многократное использование Java ProcessBuilder для agrep.exe

Моя Java-программа должна запустить agrep.exe с параметрами для всех пар элементов в большой матрице и получить количество ошибок совпадения двух строк. Я написал код, но он работает очень медленно. Могу ли я ускорить эту часть кода? Или, может быть, вы можете предложить мне некоторую Java-реализацию функции agrep?

public static double getSignatureDistance(String one, String two) throws IOException, InterruptedException {
    String strReprOne = one.replace(".*","").replace("\\.",".");
    String strReprTwo = two.replace(".*","").replace("\\.",".");

    PrintWriter writer = new PrintWriter("tmp.txt", "UTF-8");
    writer.print(strReprTwo);
    writer.close();

    List<String> cmd = new ArrayList<>();
    cmd.add("agrep.exe");
    cmd.add("-B");
    cmd.add(one);
    cmd.add("tmp.txt");

    ProcessBuilder pb = new ProcessBuilder(cmd);
    pb.redirectErrorStream(true);
    Process proc = pb.start();

    BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));

    StringBuilder lineBuilder = new StringBuilder();
    String line = "";
    char[] buf = new char[2];
    while (in.read(buf) == 2) {
        lineBuilder.append(buf);
    }
    line = lineBuilder.toString();

    Pattern p = Pattern.compile("(\\d+)\\serror");
    Matcher m = p.matcher(line);
    double agrep = 0;
    if(m.find()) {
        agrep = Double.valueOf(m.group(1));
    }

    in.close();
    proc.destroy();

    double length = strReprOne.length();
    return agrep/length;
}

Могу ли я использовать библиотеку FREJ для этой цели? Например, выполнить сопоставление строк, получить результат сопоставления и умножить его на длину сопоставляемой области?

1 ответ

Решение

Никто не знает, поэтому я использовал библиотеку FREJ.

Другие вопросы по тегам