【问题标题】:Getting key and value of linkedHashMap获取linkedHashMap的key和value
【发布时间】:2018-10-31 05:51:54
【问题描述】:

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

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();
    }

}


}

当我运行这段代码时,我得到以下信息:

info@staybysantacruz.com;Quality Inn & Suites Santa Cruz Mountains
VacationRentals321@gmail.com;In Big Bear
info@haiyi-hotels.com;Best Western Americania

所以它会同时打印电子邮件和姓名。 我试图获取linkedHashMap 的键和值,但没有运气。 有人可以帮我吗?

【问题讨论】:

  • 数据最后应该是什么样子?
  • 你能分享.cvs文件吗?
  • CSV 文件在这里:ufile.io/43d2t。它没有任何分号。
  • 基本上我需要将日期保存到 LinkedHAshMap,然后才能打印出 Key 或 Value。但不能同时使用 Key + Value。

标签: java csv linked-list readfile linkedhashmap


【解决方案1】:

因为在您的 CSV 文件中数据用半列分隔,所以首先,您必须提供 CsvReader 分隔符。

 reader = new CSVReader(new FileReader(CSVPath),";");

这是不推荐使用的构造函数初始化。

对于最新的 API,您可以使用下面的代码让 CSVReader 与分隔符成为对象。

 final CSVParser parser = new CSVParserBuilder()
  .withSeparator(';')
  .withIgnoreQuotations(true)
  .build();

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

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

【讨论】:

  • 事实上它不包含“;”。您可以在此处查看 csv 文件:uploadfiles.io/43d2t。我还不知道为什么它会打印“;”。
  • 在您的 CSV 文件中 info@st​​aybysantacruz.com;圣克鲁斯山品质套房酒店。仅有的 ;正在划分两个值
  • 现在我尝试直接从 Excel 或 Json 文件中获取信息。让我们看看我能不能做到这一点。
  • 好的验证它@Alex20280
【解决方案2】:

您正在以 CSV 格式阅读它,但它似乎用分号分隔

所以分开

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

【讨论】:

    【解决方案3】:

    对于 csv 文件,最好使用 Apache commons 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());
            }
        }
    }
    

    我使用过 commons-csv 1.5 maven链接https://mvnrepository.com/artifact/org.apache.commons/commons-csv/1.5

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

    【讨论】:

      猜你喜欢
      • 2016-07-20
      • 2012-09-02
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多