使用以下代码,我能够从表单中获取所有必要信息,这些信息是;
n = 5
p = 0.5
lambda = 0.3
d = 1
n = 8
p = 0.1
d = 1
p = 0.3
我将所有这些信息都放在HashMap中,但我实际需要的是6个哈希映射;像这样
Hashmap 1
n = 5
p = 0.5
Hashmap 2
lambda = 0.3
Hashmap 3
d = 1
Hashmap 4
n = 8
p = 0.1
Hashmap 5
d = 1
Hashmap 6
p = 0.3
换句话说,当我得到一个n作为关键字时,下一个关键字和值也应存储在此Hashmap中,下一个关键字将始终为p。
我知道拆分Hashmap真的不可能,但我找不到任何其他方式
非常感谢
public static void main(String[] args ) throws FileNotFoundException, IOException
{
File filename = new File("H:\\NetBeansProjects\\thesis2.0\\src\\thesis2\\pkg0\\txt-files\\formulier.txt");
try (BufferedReader in = new BufferedReader(new FileReader(filename)))
{
HashMap hm = new HashMap();
Pattern p = Pattern.compile("\\s+(\\w+)\\s+([0-9.]+)\\s*");
for (String line; (line = in.readLine()) != null; )
{
Matcher m = p.matcher(line);
if (m.matches())
{
String keyword = m.group(1);
String parameter = m.group(2);
hm.put(m.group(1),m.group(2));
System.out.println(m.group(1) + " = " + m.group(2));
}
}
}
}
答案 0 :(得分:1)
您可以使用List<>
来存储Map<>
,您基本上需要为将其分配到下一个Map
的值创建一个基于简单令牌的解析器。
List<Map<String,String>> motherList = new ArrayList<>();
Map<String,String> workingChild = new HashMap<>();
....
String keyword = m.group(1);
String parameter = m.group(2);
workingChild.put(keyword,parameter);
if(!keyword.equals("n")) {
motherList.add(workingChild);
workingChild = new HashMap<>();
}
我们基本上有1个包含我们的子地图的母亲列表,对于每个输入关键字和参数,我们将它放在我们当前的工作地图中,然后我们将它放在motherMap
中,如果最后一个令牌不是&#39 ; t&#34; n&#34;。