删除文本文件中应包含数字

时间:2018-04-20 10:45:42

标签: java bufferedreader string-comparison

我发现了一个java程序,它将java中的两个文本文件相互比较,并使其列出所有不在两个文本文件中的行/条目。

package Exercise1;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class main {

public static void main(String[] args) throws IOException {

    String first = "migratielijst.txt";
    String second = "complete.txt";
    BufferedReader fBr = new BufferedReader(new FileReader(first));
    BufferedReader sBr = new BufferedReader(new FileReader(second));

    ArrayList<String> strings = new ArrayList<String>();

    while ((first = fBr.readLine()) != null) {
        strings.add(first);
        first.replaceAll("[^0-9.]", "");
    }
    fBr.close();

    while ((second = sBr.readLine()) != null) {
        if (!(strings.contains(second))) {
            System.out.println(second);
        } 
    }
    sBr.close();
}
}

我发现删除所有字符的行(如下所示)并不能达到我想要的效果。

first.replaceAll("[^0-9.]", "");

说文本文件如下所示:

8271910
8271911
//8271912
8271913
8271914
8271915

它所比较的​​文本文件如下所示:

8271910
8271911
8271912
8271913
8271914
8271915

它会列出8271912,因为它在第一个文本文件中被注释掉了。 现在,如果我修改第一个文本文件并在其前面添加一个名称,我希望我的程序删除这些字符(比较时不考虑它们)。 例如:

Anya 8271910
8271911
//8271912
8271913
8271914
8271915

问题是我的程序返回:

8271910
8271912

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

您的问题来自以下几行:

strings.add(first);
first.replaceAll("[^0-9.]", "");

在Java中,字符串是不可变的。所以,你正在做的是将brut字符串添加到列表中,然后创建一个包含所需修改的新字符串。但是你的程序会忽略新的字符串。

这是一个快速修复:

strings.add(first.replaceAll("[^0-9.]", ""));

答案 1 :(得分:0)

您的原始问题陈述似乎表示您要查找出现在一个文件或另一个文件中的术语,但两者中的不是。就数据结构而言,集合而非列表最有意义,因为我们可以使用集合差异来获得所需的结果。在下面的代码中,我将这两个文件读入单独的集合,然后形成第三个集合,其中包含每个集合的差异。

Set<String> s1 = new HashSet<>();
Set<String> s1Copy = new HashSet<>();
Set<String> s2 = new HashSet<>();

String term;
while ((term = fBr.readLine()) != null) {
    s1.add(term);
    s1Copy.add(term);
}
fBr.close();

while ((term = sBr.readLine()) != null) {
    s2.add(term);
}
sBr.close();

Set<String> unique = new HashSet<>();
unique.add(s1.removeAll(s2));
unique.add(s2.removeAll(s1Copy));

System.out.println("Unique terms:");
for (String s : unique) {
    System.out.println(s);
}

答案 2 :(得分:0)

你可以尝试这样的事情

  "parameters": [
          {
            "in": "body",
            "name": "body",
            "description": "You should pass here email",
            "required": true,
            "schema": {
              "type": "object",
              "properties": {
                "email": {
                  "type": "string"
                },
                "password": {
                  "type": "string"
                }
              }
            }
          }
        ],