java - 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中是否有任何数据结构可以在一行内消除它?
先感谢您..
解决方案
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
.
推荐阅读
- javascript - 响应来自 express 的响应的 JSON.parse 语法错误
- powershell - Powershell 中的 Export-Csv 格式 - 意外的列顺序
- javascript - 使用 Mongo 的内部时钟设置 Unix 时间戳
- logstash - 解析 Java 日志并将其发送到 ELK 7.3
- python - python类的类型提示
- vue.js - 使用任何类型的部署部署 Vue 应用程序时出错
- macos - 如何正确杀死 NSWindow?
- django - Django Rest Framework - 如何设置序列化程序以使用相关模型创建 APIView
- python - 从 g.user 设置的 Flask-appbuilder 模型列默认值不起作用
- css - 如何在使用 grid 或 flex 时实现这种风格?