【问题标题】:Read the text file and store the key-value pairs in different maps读取文本文件并将键值对存储在不同的映射中
【发布时间】:2015-07-29 08:21:35
【问题描述】:

这是文本文件:

#Person
PRIM_KEY=personId
SEX=gender
YEARS=age
NAME=fullName
#Automobil
PRIM_KEY=registrationNumber
MAKE=manufacturer
TYPE=model

读取文件:

Scanner scanner = new Scanner(new FileReader("C:/workspace/column-mapping.txt"));

当我遇到#Person时,在下面的地图中定义:

Map<String, String> personMap = new LinkedHashMap<String, String>();

我想在它下面存储键值对。 所以将这些键值对存储在personMap

PRIM_KEY=personId
SEX=gender
YEARS=age
NAME=fullName

同样当我遇到#Automobil,在下面的地图中

Map<String, String> automobilMap = new LinkedHashMap<String, String>();

我希望存储这些键值对:

PRIM_KEY=registrationNumber
MAKE=manufacturer
TYPE=model

当我读取文件时,如何根据本例中的#Person#Automobil 将这些键值对存储在两个不同的映射中?

编辑示例代码:

    Scanner scanner = new Scanner(new FileReader("C:/workspace/column-mapping.txt"));
    Map<String, String> personMap = new LinkedHashMap<String, String>();
    Map<String, String> automobilMap = new LinkedHashMap<String, String>();
    String line;

    while (scanner.hasNext()) {
         line = scanner.next();
         if (!line.startsWith("#") && !line.isEmpty()) {
             String[] columns = line.split("=");

             personMap.put(columns[0], columns[1]);
         }


    }
    System.out.println(personMap);

这样我可以将所有键值对放在一个映射personMap 中。但根据部分,我希望能够将其放在不同的地图中。

【问题讨论】:

  • 你的问题是?
  • 嗯...我建议您编写一些代码来满足您发布的要求。或者……你付钱给为你写代码的人。我会做...
  • 您已经拥有了 90% 的所需代码 - 您只需要记住您当前添加到的地图并根据“#”字符后面的文本切换该地图引用。

标签: java dictionary java.util.scanner text-parsing


【解决方案1】:

我想向您推荐两种不同的方法。 第一种方法只是用 if 案例解决您的问题,在第二种方法中,我假设您想要存储多个 Automobil 和多个 Person,因此我创建了两个类来解决问题。

我希望这可以有用,制作这段代码很有趣

第一种方法

public static void main(String args[]) throws FileNotFoundException{
Scanner scanner = new Scanner(new FileReader("C:/workspace/column-mapping.txt"));
    Map<String, String> personMap = new LinkedHashMap<String, String>();
    Map<String, String> automobilMap = new LinkedHashMap<String, String>();
    String line= scanner.nextLine();

    while(scanner.hasNext()){

        Map<String, String> currentMap = null;
        if(line.equals("#Person")){
            currentMap=personMap;
        }
        if(line.equals("#Automobil")){
            currentMap=automobilMap;
        }
        while(scanner.hasNext()){
            line=scanner.nextLine();
            if(line.startsWith("#"))
                break; //restart the loop
            String splitted[] = line.split("=");
            currentMap.put(splitted[0], splitted[1]);
        }            
    }

}

第二种方法

public static void main(String[] args) throws FileNotFoundException {
    Scanner scanner = new Scanner(new FileReader("C:/workspace/column-mapping.txt"));
    Map<String, Person> personMap = new LinkedHashMap<String, Person>();
    Map<String, Car> automobilMap = new LinkedHashMap<String, Car>();
    String line;

    while (scanner.hasNextLine()) {
        line = scanner.nextLine();
        if(line.equals("#Person")){
            String primaryKey = scanner.nextLine().split("=")[1];
            String sex = scanner.nextLine().split("=")[1];
            String years = scanner.nextLine().split("=")[1];
            String name = scanner.nextLine().split("=")[1];
            personMap.put(primaryKey, new Person(sex,years,name));
        }
        if(line.equals("#Automobil")){
            String primaryKey = scanner.nextLine().split("=")[1];
            String make = scanner.nextLine().split("=")[1];
            String type = scanner.nextLine().split("=")[1];
            automobilMap.put(primaryKey, new Car(make,type));
        }

    }

    Set<String> personKeys = personMap.keySet();
    Set<String> automobilKeys = automobilMap.keySet();

    for(String k : personKeys){
        System.out.println("Person: "+k);
        System.out.println(personMap.get(k));
    }

    for(String k : automobilKeys){
        System.out.println("Car: "+k);
        System.out.println(automobilMap.get(k));
    }
}

第二种方法的两个类

public class Person {
boolean male; //true for male, false for female
int years;
String name;
String surname;

public Person(String gender, String age, String fullName){
    if(gender.equals("male"))
        male = true;
    else
        male = false;
    years=Integer.parseInt(age);
    String splitted[] = fullName.split(" ");
    name = splitted[0];
    surname = splitted[1];
}

@Override
public String toString(){
    String gender = "male";
    if(!male)
        gender = "female";
    return "SEX = "+gender+"\nYEARS = "+years+"\nNAME = "+name+" "+surname;
}
}

public class Car {
String make;
String type;

public Car(String manufacturer,String model){
    make=manufacturer;
    type=model;
}

@Override
public String toString(){
    return "MAKE = "+make+"\nTYPE = "+type;
}

}

【讨论】:

    【解决方案2】:

    不是最优雅的解决方案,但可以正常工作。

    Scanner scanner = new Scanner(new FileReader("C:/workspace/column-mapping.txt"));
    Map<String, String> personMap = new LinkedHashMap<String, String>();
    Map<String, String> automobilMap = new LinkedHashMap<String, String>();
    
    String line;
    boolean person = false;
    boolean automobil= false;
    
    while (scanner.hasNext()) {
         line = scanner.next();
         if(line.startsWith("#Person") && !line.isEmpty()){
            line = scanner.next();
            person = true;
            automobil = false;
         }
    
         if(line.startsWith("#Automobil") && !line.isEmpty()){
            line = scanner.next();
            automobil = true;
            person = false;
         }
    
         if(person){
            if (!line.startsWith("#") && !line.isEmpty()) {
                String[] columns = line.split("=");
                for(String str:columns){
                     System.out.println(str);
                }
                personMap.put(columns[0], columns[1]);
            }
         }
    
         if(automobil){
             if (!line.startsWith("#") && !line.isEmpty()) {
                 String[] columns = line.split("=");
                 for(String str:columns){
                      System.out.println(str);
                 }
                 automobilMap.put(columns[0], columns[1]);
             }
          }
    
    
    
    }
    System.out.println("personMap"+personMap);
    System.out.println("automobilMap"+automobilMap);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 2013-11-19
      • 1970-01-01
      相关资源
      最近更新 更多