java在处理期间更改字符串?

时间:2013-11-15 16:38:24

标签: java regex string mapping

我必须解析两个大文本文件。每个文件都包含从本地标识符到字符串值的字符串映射。 local-identifier实际上只是一个临时密钥。稍后映射应该是从值(file1)到值(file2)。

所以我做的是:

  • 使用每个文件中的映射构建HashMaps。
  • 通过遍历键集我构建一个将值(file1)映射到值(file2)的hashmap
之后我有三个HashMaps

  1. localid - >值(文件1)
  2. localid - >值(文件2)
  3. value(file1) - >值(文件2)
  4. 我为验证所做的是: 对于每个localid

    • a)从Map 1
    • 中获取值(file1)
    • b)从Map 2中获取值(file2)
    • c)使用步骤a)
    • 中的密钥从Map3中获取值(file2)
    • d)将值(file2)_b与值(file2)_c
    • 进行比较

    会发生的是,步骤d)中的两个值在15%的键值对中不相等。

    实际上那里有某种系统...例如N2c变为[N] 2c,[nH] 1c3c变为n1c3c,(N)变为([NH])

    Java是否可能将String解释为正则表达式或者有其他人的想法?

    非常感谢

    编辑:好的,这里有一些代码^^是的,这更具可读性......对不起......

        HashMap<String, String> idToFile1 = File1.getMapping();
        HashMap<String, String> idToFile2 = File2.getMapping();
    
        HashMap<String, String> file1ToFile2 = new HashMap<String, String>();
        for(String localid : smilesfragments.keySet()){
            inchiToSmiles.put(idToFile1.get(localid), idToFile2.get(localid));
        }
    
        for(String localid : idToFile1.keySet()){
            String file1val  = idToFile1.get(localid);
            String file2val = idToFile2.get(localid);
            if(!file2val.equals(file1ToFile2.get(file1val))){
                System.err.println("mismatch!");
            }
        }
    

    我在15%的情况下得到了不匹配

1 个答案:

答案 0 :(得分:1)

如果不同的标识符可以具有相同的值,则第三个映射将保留最后一个解析的映射。例如。 :

文件1:

  • localId1 =&gt; “AAAA”
  • localId2 =&gt; “BBBB”
  • localId3 =&gt; “CCCC”
  • localId4 =&gt; “AAAA”

文件2:

  • localId1 =&gt; “1111”
  • localId2 =&gt; “2222”
  • localId3 =&gt; “3333”
  • localId4 =&gt; “4444”

您的第一张和第二张地图会将此映射存储在您的文件中。

但是,当你构建第三张地图时,你会得到:

  • “aaaa”=&gt; “4444”
  • “bbbb”=&gt; “2222”
  • “cccc”=&gt; “3333”

正如您所看到的,当您验证解析文件时,您将收到localId1的错误(文件1中的“aaaa”,文件2中的“1111”,但“aaaa”=&gt;“ 4444“在第三张地图中。”

如果无法确保文件中值的唯一性,则无法在地图中存储“文件1中的值”=&gt; “文件2中的值”。

这可以解释15%的错误。