尝试将每个输入行拆分为组并存储在hashmap中

时间:2016-01-09 19:15:52

标签: java

static HashMap<Integer, String> names = new HashMap<Integer, String>();
static Scanner in = new Scanner(System.in);

public static void main(String[] args) {
    int i = 0;
    while (in.hasNext())
        s = in.nextLine();
        for (int j = 0; j < s.split(" ").length; j++) {
            names.put(i, s.split(" ")[j]);
        }
        i++;
}

我尝试读取每行输入并根据空格拆分它,然后将每个元素分别分配给相同的散列键。

Ex输入

  约翰乔鲍勃

     

詹姆斯

     亨利乔治

应该进入像这样的散列图

  

1:约翰

     

1:乔

     

1:bob

     

2:詹姆斯

     

3:亨利

     

3:乔治

当我输入输入时,退出循环的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

映射是键/值集合,其中每个键只链接到一个值。在你的情况下,你似乎想要每个键有几个值 - 一个选项如下所示,其中每个键(行号)映射到一个名称列表:

Map<Integer, List<String>> names = ...;

要填充地图,您需要为每一行创建一个列表,例如:

public static void main(String[] args) {
    int i = 0;
    while (in.hasNext()) {
        String s = in.nextLine();
        names.put(i, Arrays.asList(s.split(" ")));
        i++;
    }
}

ps:我认为while行末尾的缺失括号是一个错字。

答案 1 :(得分:0)

一种简单的方法就是在地图中使用一个列表。 像这样:

static HashMap<Integer, ArrayList<String>> names = new HashMap<>();

完整的工作代码示例:

int i = 0;
while (in.hasNext()) {
    String s = in.nextLine();
    if(s.equalsIgnoreCase("break")) break;
    ArrayList<String> namesList = new ArrayList<>();
    names.put(i, namesList);
    for (int j = 0; j < s.split(" ").length; j++) {
        namesList.add(s.split(" ")[j]);
    }
    i++;
}

System.out.println();

for (Map.Entry<Integer, ArrayList<String>> entry : names.entrySet()) {
    System.out.print(entry.getKey()+": ");
    for (String s : entry.getValue()) {
        System.out.print(s + ", ");
    }
    System.out.println();
}