Java 获取linkedHashMap的键和值

Java 获取linkedHashMap的键和值,java,csv,linked-list,readfile,linkedhashmap,Java,Csv,Linked List,Readfile,Linkedhashmap,我尝试从csv文件中读取数据,将其保存到linkedHashMap并打印。但问题是我不需要分别打印键和值。 Csv文件只有两列:第一列:电子邮件,第二列:名称 public class CsvReader { String CSVPath = "c:/Users/PC/Desktop/file.csv"; CSVReader reader; public void readCsvFile() throws IOException { try { reader = n

我尝试从csv文件中读取数据,将其保存到linkedHashMap并打印。但问题是我不需要分别打印键和值。 Csv文件只有两列:第一列:电子邮件,第二列:名称

public class CsvReader {

String CSVPath = "c:/Users/PC/Desktop/file.csv";
CSVReader reader;

public void readCsvFile() throws IOException {
    try {

        reader = new CSVReader(new FileReader(CSVPath));
        String[] column;
        ArrayList<LinkedHashMap<String, String>> myArraylist = new 
    ArrayList<LinkedHashMap<String, String>>();
        LinkedHashMap<String, String> map;

        while ((column = reader.readNext()) != null) {
            map = new LinkedHashMap<String, String>();
            map.put("Emails", column[0]);
            myArraylist.add(map);
        }
        reader.close();

        for (int i = 0; i < myArraylist.size(); i++) {

System.out.println(myArraylist.get(i).get("Emails").toString());

        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}


}
所以它会同时打印电子邮件和姓名。 我试图了解linkedHashMap的关键和价值,但并没有成功。
有人能帮我吗

您将此作为CSV阅读,但它似乎用分号分隔

如此分裂

String email = column[0].split (";")[0];
String desc = column[0].split (";")[1];

对于csv文件,最好使用ApacheCommons csv jar作为其有效工具,并意味着用最少的代码读取csv,下面的更好功能是相同的代码

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;

public class Test {

    static String CSVPath = "c:/Test/SampleFile.csv";

    public static void main(String...strings) throws IOException {
        Map<String, String> userNameEmailMap = new HashMap<String, String>();
        CSVParser csvParser = new CSVParser(new FileReader(new File(CSVPath)), CSVFormat.DEFAULT);
        List<CSVRecord> values = csvParser.getRecords();
        for (CSVRecord csvRecord : values) {
            for (String rowRecord : csvRecord) {
                String[] records = rowRecord.split("\\s+");
                System.out.println(Arrays.toString(records));
                //if you want to add it to a map 
                userNameEmailMap.put(records[0], records[1]);
            }
        }
        csvParser.close();

        for (Entry<String, String> entry : userNameEmailMap.entrySet()) {
            System.out.println("Email :: "+entry.getKey()+"   "+"Value :: "+entry.getValue());
        }
    }
}
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.array;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入java.util.Map.Entry;
导入org.apache.commons.csv.CSVFormat;
导入org.apache.commons.csv.CSVParser;
导入org.apache.commons.csv.CSVRecord;
公开课考试{
静态字符串CSVPath=“c:/Test/SampleFile.csv”;
公共静态void main(字符串…字符串)引发IOException{
Map usernamemailmap=newhashmap();
CSVParser CSVParser=new CSVParser(新文件读取器(新文件(CSVPath)),CSVFormat.DEFAULT);
列表值=csvParser.getRecords();
用于(CSVRecord CSVRecord:值){
for(字符串行记录:csvRecord){
字符串[]记录=行记录。拆分(\\s+);
System.out.println(array.toString(records));
//如果要将其添加到地图中
usernamemailmap.put(记录[0],记录[1]);
}
}
csvParser.close();
for(条目:usernamemailmap.entrySet()){
System.out.println(“电子邮件:”+entry.getKey()+“+”值::“+entry.getValue());
}
}
}
我使用了commons csv 1.5 马文链接


最好使用commons csv,因为如果添加额外的列,它将有助于将来的扩展。

与csv文件中用半列分隔的数据一样,因此首先,您必须提供CsvReader分隔符

 reader = new CSVReader(new FileReader(CSVPath),";");
 final CSVParser parser = new CSVParserBuilder()
  .withSeparator(';')
  .withIgnoreQuotations(true)
  .build();

final CSVReader reader = new CSVReaderBuilder(new StringReader(csv))
  .withSkipLines(1)
  .withCSVParser(parser)
  .build();
这是不推荐使用的构造函数初始化

对于最新的API,您可以使用以下代码使用分隔符将CSVReader设置为对象

 reader = new CSVReader(new FileReader(CSVPath),";");
 final CSVParser parser = new CSVParserBuilder()
  .withSeparator(';')
  .withIgnoreQuotations(true)
  .build();

final CSVReader reader = new CSVReaderBuilder(new StringReader(csv))
  .withSkipLines(1)
  .withCSVParser(parser)
  .build();

假设您有分隔符半列,如果您有除逗号以外的任何其他分隔符,因为它是CSVReader的默认分隔符

数据在结尾应该是什么样子?您可以共享.cvs文件吗?CSV文件在这里:。它没有任何分号。基本上我需要将日期保存到LinkedHAshMap,然后才能打印出键或值。但不能同时使用键+值。事实上,它不包含“;”。您可以在此处检查csv文件:。我还不知道为什么它会在你的CSV文件中打印“;”info@staybysantacruz.com;圣克鲁斯山脉优质套房酒店。只有我试图直接从Excel或Json文件获取信息。让我们看看我是否可以这样做。好的,在Alex20280上验证一下