You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:20:33