首页 > 解决方案 > java中文件的冗余值消除

问题描述

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

如果一个 Id 遇到第 1 次,则相同的 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中是否有任何数据结构可以在一行内消除它?

先感谢您..

标签: javafile

解决方案


Set<Double>您可以使用 a来存储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.


推荐阅读