属性比较问题

Jam*_*sev 2 java properties

假设您有2个Properties对象.一个包含主属性,另一个包含目标.你的工作是比较两者.

masterValue = masterProperties.getProperty(masterKey);


for (Properties targetFileProperty : targetFileList) {
   if (targetFileProperty.containsKey(masterKey)) {
   targetValue = targetFileProperty.getProperty(masterKey);

   if (masterValue.equals(targetValue)) { //<---- this is where the problem is
      // do something clever
   } else {
      // do something clever
Run Code Online (Sandbox Code Playgroud)

我在这个例子中面临的问题是:

当主密钥为"A"且主值为"10"且目标密钥为"A"且"目标密钥为"10"时,上面的代码认为这些是相同的.换句话说,它是修剪或忽略空格.

您是否可以指出我的逻辑中的错误或建议更好的方法断言空白区域不被忽略?谢谢.

pol*_*nts 7

java.util.Properties继承其equals(Object)from Hashtable,实现了Map相等:

将指定对象与此映射进行相等性比较.返回true如果给定对象也是一个映射并且两个映射表示相同的映射.更正式地说,两个映射m1m2表示相同的映射m1.entrySet().equals(m2.entrySet()).这可确保equals方法在Map接口的不同实现中正常工作.

因此,如果您想比较两个是否Properties包含相同的键和值,您可以这样做props1.equals(props2).

至于你的问题,我认为你没有发现真正的问题." 10 ".equals("10")绝对是false.问题可能是字符串在作为值输入之前被修剪Properties(您可以打印您要比较的值以查看是否确实如此).

如果空格很重要,则必须在属性文件中将其转义.这是一个片段,展示它是如何完成的:

    Properties p = new Properties();
    p.put("X", "   ");
    p.store(System.out, "test");
Run Code Online (Sandbox Code Playgroud)

这打印(_为了清晰起见,我已经替换了空间):

#test
#Mon Jun 21 22:20:04 ICT 2010
X=\___
Run Code Online (Sandbox Code Playgroud)