Java中文件中的冗余值消除

时间:2018-06-21 19:39:24

标签: java file

我有一个数据文件名称Test_1.txt。该数据文件由12行和3列组成。最左的列称为ID列。该ID具有冗余ID。我想编写一个Java程序来删除该多余的ID。

如果一个Id第一次遇到,那么第二个同一个Id不会被接受。

我的数据文件看起来像这样

86.0    1.2356  -0.6325
86.0    0.2356  0.86982
25.0    1.0512  0.97852
30.0    2.6581  2.25147
86.0    2.3412  1.23456
18.0    -0.2358 1.5689
90.0    3.5687  -0.8974
88.0    1.9852  -0.1478
30.0    1.2365  -0.2356
70.0    2.0789  -1.2564
87.0    9.2547  1.1120
55.0    -4.1254 1.3611

所以根据我的问题ID:86和30是多余的。

我为此写下了一个Java代码:

import Jama.Matrix;
import java.io.*;
import java.util.Scanner;

public class Redundant {
public static void main(String args[])throws IOException{
    Scanner x= new Scanner(new File("D:\\Test_1.txt"));
    Matrix A=new Matrix(3,1);
    double a=0.0,b=0.0,c=0.0;
    while(x.hasNext()) {
        a = x.nextDouble();//Here it can read the ID value perfectly
        b = x.nextDouble();
        c = x.nextDouble();
        A=new Matrix(new double[][]{{a},{b},{c}});//This is Jama Matrix where I store those values. But I want to store ID 86 only one time first time it can encounter 86. Same is true for ID No:30
        A.print(9,6);
    }

 }

}

那应该采取什么方法来消除冗余?

Java中是否有任何数据结构可以在一天内消除它?

先谢谢您。

1 个答案:

答案 0 :(得分:0)

您可以使用Set<Double>来存储以前见过的a值来解决此问题:

Set<Double> set = new HashSet<>();

然后,在您的循环中:

a = x.nextDouble();
b = x.nextDouble();
c = x.nextDouble();
if (set.add(a)) {
    A=new Matrix(new double[][]{{a},{b},{c}});
    A.print(9,6)
}

之所以可行,是因为set.add仅在该值先前不在集合中时才返回true。


请注意,在此处使用JAMA是非常多余的。只需使用System.out.format