拆分正则表达式的结果

时间:2016-02-02 14:10:23

标签: java

使用以下代码,我能够从表单中获取所有必要信息,这些信息是;

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));
            }
       }
    }  
}

1 个答案:

答案 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;。