java - 显示 csv 文件中字符串数组中的重复项 (Java)

标签 java csv

我的问题是,我从 csv 文件创建了一个数组,现在必须输出任何具有重复项的值。 该文件的布局为 5x9952。它由以下数据组成:

id,birthday,name,sex, first name

我现在希望程序在每一列(例如名称)中向我显示有哪些重复项。就像有两个同名的人一样。但无论我在互联网上找到什么,我都会尝试只显示行的重复项(例如姓名和名字是否相同)。 这是我到目前为止所得到的:

package javacvs;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author Tobias
 */
public class main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        String csvFile = "/Users/Tobias/Desktop/PatDaten/123.csv";
        String line = "";
        String cvsSplitBy = ",";

        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {

            while ((line = br.readLine()) != null) {

                // use comma as separator
                String[] patDaten = line.split(cvsSplitBy);


for (int i = 0; i < patDaten.length-1; i++)
        {
            for (int j = i+1; j < patDaten.length; j++)
            {
                if( (patDaten[i].equals(patDaten[j])) && (i != j) )
                {
                    System.out.println("Duplicate Element is : "+patDaten[j]);
                }
            }
        }
                }
            }catch (IOException e) {
            e.printStackTrace();
        }
        }

    }

(我更改了 csv 的名称,因为它包含 secret 数据)

最佳答案

真正的事情是:停止思考“低水平”。好的 OOP 就是创建有用的抽象。

换句话说:您的第一站应该是创建一个有意义的类定义来表示一行的内容,我们将其称为 Person现在上课。然后你将进一步关注的问题分开:

  • 您创建一个类/方法,除了读取该 CSV 文件之外什么也不做 - 并为每行创建一个 Person 对象
  • 您创建了一个有意义的数据结构,可以告诉您有关重复项的信息

后者可以(例如)某种反向索引。意思是:你有一个Map<String, List<Person>> 。阅读完所有 Person 对象(可能在一个简单的列表中)后,您可以执行以下操作:

Map<String, List<Person>> personsByName = new HashMap<>();
for (Person p : persons) {
  List<Person> personsForName = personsByName.get(p.getName());
  if (personsByName == null) {
    personsForName = new ArrayList<>();
    personsByName.put(p.getName(), personsForName);
  }
  personsForName.add(p);
}

在该循环之后,该 map 包含表中使用的所有名称 - 对于每个名称,您都有相应人员的列表。

关于java - 显示 csv 文件中字符串数组中的重复项 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45995356/

相关文章:

java - JTextPane 输出奇怪的控制台字符

python - 在 Python 中解析管道分隔的文件

java - 在 Java 中通过标题解析特定列

PHPExcel 保存 CSV 也在添加网页 HTML

java - 在 CSV 文件中写入/追加/搜索文本的最有效的内存/CPU 方式

jvm - java语法问题

java - Intellij Idea 中的 Scala/Java 编译顺序

java - 无法在 hibernate 和 spring mvc 中添加或更新外键

python - 在 Python 中将多个字符串写入 CSV 文件

java - Eclipse 中结构化文本编辑器 (JSP) 中的语法高亮显示