我正在传递
String str = "First Name: John\n Last Name: GrannySmith\nBirthday: January 1 2014\n First Name: George\n Last Name: Smith\nBirthday: January 2 2014 ";
进入以下方法
public static void sortMap(String str) {
String[] parsedInput = str.split("\n");
Set<String> information = new HashSet<String>();
Map<String, Set<String>> myMap = new HashMap<String, Set<String>>();
for (int i = 0; i < parsedInput.length; i++) {
String firstName = "";
if (parsedInput[i].startsWith("First Name")) {
firstName = parsedInput[i].split(": ")[1];
} else {
while (!(parsedInput[i].startsWith("First Name"))) {
information.add(parsedInput[i].split(": ")[1]);
}
}
myMap.put(firstName, information);
System.out.println(myMap.get(firstName));
}
}
我想要做的是将我的数据存储到一个hashmap中,如果用户输入他们的名字,那么我可以显示他们的全部信息。信息存储在文件中。正在读取该文件。我已将文件拆分到下一行。如果下一个喜欢恰好是名字,那么我知道我想要一个新的键和值,这就是为什么我有if语句。 while循环是为了确保为该特定键存储该人的所有信息(这样,如果我添加地址,id等,它将全部存储在该特定键中)。当我运行这个时,我得到&#34; []&#34;的结果。而不是信息。我不确定我的逻辑在哪里出错?似乎我陷入了无限循环。
答案 0 :(得分:0)
你的方法有很多问题,你可能会有更好的运气吗
// Removes whitespace (if in not null), otherwise returns "".
private static String safeTrim(String in) {
if (in != null) {
return in.trim();
}
return "";
}
public static class Info {
private String firstName;
private String lastName;
private String birthDay;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = safeTrim(firstName);
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = safeTrim(lastName);
}
public String getBirthDay() {
return birthDay;
}
public void setBirthDay(String birthDay) {
this.birthDay = safeTrim(birthDay);
}
public Info(String firstName, String lastName,
String birthDay) {
setFirstName(firstName);
setLastName(lastName);
setBirthDay(birthDay);
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("First Name: ").append(firstName)
.append('\n');
sb.append("Last Name: ").append(lastName)
.append('\n');
sb.append("Birthday: ").append(birthDay);
return sb.toString();
}
}
// Create and return a Map of the Object type above.
public static Map<String, Info> sortMap(String str) {
// start parsing at first name.
String[] firstNames = str.split("First Name");
Map<String, Info> map = new HashMap<String, Info>();
for (String nameStr : firstNames) {
nameStr = safeTrim(nameStr);
if (nameStr.length() > 0) {
// add back the key name -
nameStr = "First Name" + nameStr;
String[] fields = nameStr.split("\n");
// The three fields to find...
String firstName = "";
String lastName = "";
String birthDay = "";
for (String f : fields) {
// split name-value.
String[] nv = safeTrim(f).split(":");
if (nv.length != 2) {
continue;
}
nv[0] = safeTrim(nv[0]);
if (nv[0].equalsIgnoreCase("First Name")) {
firstName = safeTrim(nv[1]);
} else if (nv[0]
.equalsIgnoreCase("Last Name")) {
lastName = safeTrim(nv[1]);
} else {
birthDay = safeTrim(nv[1]);
}
}
map.put(firstName, new Info(firstName,
lastName, birthDay));
}
}
return map;
}
public static void main(String[] args) {
String str = "First Name: John\n Last Name: GrannySmith\n"
+ "Birthday: January 1 2014\n First Name: George\n "
+ "Last Name: Smith\nBirthday: January 2 2014 ";
Map<String, Info> map = sortMap(str);
System.out.println(map.get("John"));
}
当我运行它时,输出
First Name: John
Last Name: GrannySmith
Birthday: January 1 2014