Java比较来自两个地方的字符串并排除任何匹配

时间:2017-04-27 12:04:17

标签: java replace while-loop bufferedreader stringbuffer

我尝试使用 results.txt 减去所有匹配的项目,成功地将一些字符串输入与另一个.txt文件进行比较。一直盯着这段代码太久了,我无法弄清楚它为什么不起作用。如果我可以在正确的方向上操纵,那么编码的新手就会很感激!也许我需要一种不同的方法?对于您可能发出的任何响亮的嘀嗒声,请提前道歉。使用Java8。

//Sending a String[] into 'searchFile', contains around 8 small strings.
//Example of input: String[]{"name1","name2","name 3", "name 4.zip"}
                              ^ This is my exclusions list.

    public static void searchFile(String[] arr, String separator)
    {
        StringBuilder b = new StringBuilder();
        for(int i = 0; i < arr.length; i++)
        {
            if(i != 0) b.append(separator);
            b.append(arr[i]);
            String findME = arr[i];
            searchInfo(MyApp.getOptionsDir()+File.separator+"file-to-search.txt",findME);
        }
    }

^这很好用。然后我将搜索结果发送给搜索信息&#39;并尝试匹配并删除任何重复(完整,不是部分)字符串。这是我目前失败的地方。代码运行但没有产生我想要的输出。它经常找到部分字符串而不是完整字符串。我认为&#39; results.txt&#39;文件被每次都覆盖......但是我不确定是不是!

file-to-search.txt 包含:&#34; name2&#34;,&#34; name.zip&#34;,&#34; name 3.zip&#34; ,&#34;名称4.zip&#34; (文本文件只是一行)

public static String searchInfo(String fileName, String findME)
{
    StringBuffer sb = new StringBuffer();
    try {
        BufferedReader br = new BufferedReader(new FileReader(fileName));

        String line = null;
        while((line = br.readLine()) != null)
        {
            if(line.startsWith("\""+findME+"\""))
                 {
                    sb.append(line);
                        //tried various replace options with no joy
                        line = line.replaceFirst(findME+"?,", "");

                        //then goes off with results to create a txt file
                        FileHandling.createFile("results.txt",line);
                }
        }
    } catch (Exception e) {
        e.printStackTrace();        
    }
    return sb.toString();
}

我试图结束的是结果文件MINUS任何匹配的完整字符串(不是部分字符串):

e.g。 results.txt 最终得到:&#34; name.zip&#34;,&#34; name 3.zip&#34;

1 个答案:

答案 0 :(得分:0)

确定我的信息。你能做的就是这个

List<String> result = new ArrayList<>();
String content = FileUtils.readFileToString(file, "UTF-8");
for (String s : content.split(", ")) {
    if (!s.equals(findME)) { // assuming both have string quotes added already
        result.add(s);
    }
}
FileUtils.write(newFile, String.join(", ", result), "UTF-8");

使用apache commons文件utils轻松实现。您可以根据需要在逗号后添加或删除空格。