首页 > 解决方案 > 如何使用取自外部文件输入的对象名称在 Java 中创建对象

问题描述

我有一个class Customer带有构造函数的 javaCustomer(string firstName, string lastName)和一个getName()允许我从每个Customer对象中获取客户名称的方法

然后我有一个input.txt包含名字和姓氏的文件,如下例所示:

Alan, Walker

Tom, Hanks

如何从上面的每一行中自动读取名字和姓氏,并相应Customer地为该人名创建一个对象?

示例:我想让程序自动读取第一行“Alan,Walker”并创建对象AlanWalker = new Customer("Alan", "Walker"),然后对第二行执行相同操作

其次,我的第二个任务是为用户提供从键盘发出命令以获取创建的客户名称的能力。例如:用户可以键入“Alan Walker,打印姓名”,程序将运行AlanWalker.getName()以提供所需的输出为“Alan Walker”。我该如何实施?

标签: javaiostream

解决方案


我在下面写了我对这个问题的解决方案,其中包括使用 HashMap 通过值访问特定对象。( HashMap ) 下面的代码将根据名称创建 Person 对象的 HashMap。

public static final HashMap<String, Person> people = new HashMap<>();

对于这些示例,将使用以下 Person 类:

public class Person {

    private String firstName, lastName;

    public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getName() {
        return firstName + " " + lastName;
    }

}

您可以首先使用 BufferedReader 读取所有文件并为每一行创建一个对象,如下所示:

File txtFile = new File("names.txt");
BufferedReader txtFileReader = new BufferedReader(new FileReader(txtFile));
String line = null;
line = txtFileReader.readLine();

while (line != null) {
    String firstName = line.split(", ")[0];
    String lastName = line.split(", ")[1];

    Person person = new Person(firstName, lastName);
    people.put(person.getName(), person);

    line = txtFileReader.readLine();
}
txtFileReader.close();

此代码将为文件中格式的每一行有效输入创建一个新的 Person 实例<first_name>, <last_name>

我们现在将有一个 HashMap,如下所示:

"Alan Walker", PERSON OBJECT
"Tom Hanks", PERSON OBJECT

然后根据用户输入与每个对象进行交互,我们可以使用用户输入从 people HashMap 中检索对象,Alan Walker, print name代码如下:

BufferedReader consoleInput = new BufferedReader(new InputStreamReader(System.in));
String input = consoleInput.readLine();
String name = input.split(", ")[0];
Person chosenPerson = people.get(name);

从这里您可以对对象执行操作,例如,如果您想获取对象的名称,您将执行以下操作:

chosenPerson.getName()

希望这可以帮助。


推荐阅读