首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java ProcessBuilder在agrep.exe中的多次使用

Java ProcessBuilder在agrep.exe中的多次使用
EN

Stack Overflow用户
提问于 2015-06-08 13:34:46
回答 1查看 104关注 0票数 1

我的Java程序需要启动agrep.exe,其中包含一个大矩阵中所有元素对的参数,并获得两个刺痛的匹配错误数。我写了一段代码,但运行得很慢。我能加速这部分代码吗?或者,也许,您可以建议我一些agrep函数的java实现?

代码语言:javascript
复制
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图书馆做这个用途吗?例如,执行字符串匹配,得到匹配结果并将其乘以匹配区域的长度?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-12 17:30:08

没人知道,所以我用过弗雷杰图书馆。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30710570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档