我有一个java class Customer
以构造者为 Customer(string firstName, string lastName)
和a getName()
方法,让我能够从每一个 Customer
对象
那么我有一个 input.txt
文件的名字和姓氏按行排列,如下例。
Alan, Walker
Tom, Hanks
我怎样才能从上面的每一行中自动读出名字和姓氏,并相应地建立一个 Customer
该人名的对象?
例如:我想让程序自动读取第一行 "Alan,Walker",并为该人名创建对象。我想让程序自动读取第一行 "Alan, Walker",然后创建一个对象 AlanWalker = new Customer("Alan", "Walker")
然后对第二行进行同样的操作
其次,我的第二项任务是为用户提供从键盘下达命令的能力,以获得所创建的客户名称。例如:用户可以输入 "Alan Walker, print name",然后程序将执行 AlanWalker.getName()
给予所需的输出为 "Alan Walker"。我如何实现这个功能?
我在下面写了我对这个问题的解决方案,其中包括使用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()
希望这能帮到你
在java中,我们不能创建动态变量,但是你可以动态地创建对象,如下图所示。我的建议是使用map,并保持键为人名,然后存储customer对象作为值,当任何人使用scanner(只是一个例子)输入名字时,应用程序应该在map里面检查,并应该返回相应的值,即customer对象。
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
public class Demo {
List<String> data = new ArrayList<>();
{
data.add("Abhishek");
data.add("Alan");
}
public void demo()
{
data.forEach( name -> {
Customer customerObj = null;
try
{
customerObj = Customer.class.getConstructor(String.class).newInstance(name);
} catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
System.out.println(customerObj.getName());
} );
}
public static void main(String[] args)
{
new Demo().demo();
}
}