如何在不修改Properties文件Key前缀的情况下匹配Key后半部分取值?
解决方案:通过Key后半段匹配Properties值
1. 构建后缀映射表
加载原Properties文件后,遍历所有Key,按:分割出后半段,把后半段作为新Key、原Value作为对应值存入新Map。后续直接通过这个Map用后缀取值即可。
示例代码(Java):
Properties props = new Properties(); props.load(new FileInputStream("your.properties")); Map<String, String> suffixMap = new HashMap<>(); for (String key : props.stringPropertyNames()) { String[] parts = key.split(":", 2); // 只分割一次,避免Key包含多个冒号时出错 if (parts.length == 2) { suffixMap.put(parts[1], props.getProperty(key)); } } // 调用suffixMap.get("1234")就能获取值A
2. 自定义Properties读取逻辑
重写Properties的getProperty方法,先按常规逻辑查找值,找不到时遍历所有原Key,匹配后缀是否一致。
示例代码:
public class SuffixMatchingProperties extends Properties { @Override public String getProperty(String key) { String value = super.getProperty(key); if (value != null) { return value; } // 遍历所有Key寻找后缀匹配项 for (String propKey : this.stringPropertyNames()) { String[] parts = propKey.split(":", 2); if (parts.length == 2 && parts[1].equals(key)) { return super.getProperty(propKey); } } return null; } } // 实例化该类加载文件后,调用getProperty("1234")即可取值
3. 加载时追加后缀条目
加载原文件后,额外添加一组以原Key后半段为新Key的条目到Properties中,既保留原条目,又能通过后缀直接取值。
示例代码:
Properties props = new Properties(); props.load(new FileInputStream("your.properties")); // 先收集待添加条目,避免遍历过程中修改集合触发异常 List<String[]> toAdd = new ArrayList<>(); for (String key : props.stringPropertyNames()) { String[] parts = key.split(":", 2); if (parts.length == 2) { toAdd.add(new String[]{parts[1], props.getProperty(key)}); } } // 批量添加新条目 for (String[] entry : toAdd) { props.setProperty(entry[0], entry[1]); } // 现在用"VN1234:1234"或"1234"都能获取值A
内容的提问来源于stack exchange,提问作者Alex Lee
相关产品推荐
相关产品推荐

