gpt4 book ai didi

java - CSV 解析以查找相似值

转载 作者:行者123 更新时间:2023-12-02 02:43:16 25 4
gpt4 key购买 nike

我有两个 CSV 文件。我正在尝试找到类似的列并执行一些操作。

假设 CSV1 的格式如下:

name, created by, last modified date
red-123, tom hanks, 22-09-80
yellow-123, tom tanks, 22-09-87
blue-123, Jerry hanks, 22-09-97

假设 CSV2 的格式如下:

name, username, status
"Tom, Hay", tomhay@stack.com, live
"hanks, tom",tomhanks@stack.com, expired
"tom, tanks", tomtanks@stack.com, live
"Humprey, Jerry", jerry@stack.com, live

输出:如果 CSV 1 创建的列与 CSV 2 中的名称匹配,则新的 CSV 将为

namefromcsv2, createdbyfromcsv1, userid.
"hanks, tom",tom hanks, tomhanks
"tom, tanks", tom tanks, tomtanks.

我尝试下面的方法将名称列的字符检查到包装箱中,以便匹配,然后用正则表达式提取相应的用户ID,我是否使用带有bean的univocity来解析而不是打开csv:

public static Set<Character> stringToCharacterSet(String s) {
Set<Character> set = new HashSet();
for (char c : s.toCharArray()) {
set.add(c);
}
return set;
}

public static boolean containsAllChars(String container, String containee) {
return stringToCharacterSet(container).containsAll(stringToCharacterSet(containee));
}

阅读并匹配

CsvReader doc_meta_data = new CsvReader(prop.getProperty("a_doc_path"));
// CsvReader doc_meta_data1 = new CsvReader(prop.getProperty("b_doc_path"));

doc_meta_data.readHeaders();

while (doc_meta_data.readRecord()) {
String Name = doc_meta_data.get("Name");
String Created_By = doc_meta_data.get("Created By");
System.out.println(containsAllChars(Name, Created_By));
}

最佳答案

如果您使用的是 Java 8+ 并且正在使用 Lists 或 List,您可以执行以下操作:

 public static void main(String args[]) {
List<String> csv1 = new ArrayList<String>();
List<String> csv2 = new ArrayList<String>();

csv1.addAll(Arrays.asList("tom hanks", "tom tanks", "Jerry hanks"));
csv2.addAll(Arrays.asList("Tom, Hay", "hanks, tom", "tom, tanks", "Humprey, Jerry"));

csv2.stream().forEach(name -> {
name = name.replace(",", "");
if(csv1.contains(name.toLowerCase())) {
System.out.println("do something with " + name);
}
});
}

根据上面的示例,您可以将匹配的名称添加到第三个 List<Object>并操纵其内容以满足您的要求。我相信比较整个文本比遍历每个字符更容易,并且您还可以处理任何修剪或清理,以确保包含有两个“干净”的值进行比较(替换特殊字符、修剪、双空格等)。

关于java - CSV 解析以查找相似值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57164573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com