【问题标题】:Dump YAML File to Java Class with a field that contains a hyphen [duplicate]使用包含连字符的字段将 YAML 文件转储到 Java 类 [重复]
【发布时间】:2019-12-08 19:35:49
【问题描述】:

我正在尝试使用 SnakeYAML 将 YAML 文件转储到 Java 类,但该字段的名称中有连字符,并且 java 变量不能包含 -。

我已经看到this 对此主题的回答,但没有解释正在发生的事情或toCameName() 的方法。

Yaml 文件

field-with-hyphen: 1

目标

public int fieldwithhypehen;

或其他任何东西,以便我可以将其转储。

【问题讨论】:

  • 在链接的问题中,toCameNametoCamelCase 的拼写错误,这种方法据说可以将蛇形大小写转换为驼峰式或小驼峰式。您必须使用提供类似功能的库或自己实现它。

标签: java snakeyaml


【解决方案1】:

感谢 Clashsoft 为我指明了正确的方向。我能够做一些进一步的研究并构建以下方法,将带有空格和连字符的值传输到 camelCase。 field-with-hyphens and spaces变成fieldWithHyphensAndSpaces

public class CamelCase {
    public static String camelize(String input) {
        for (int i = 0; i < input.length(); i++) {
            if(input.substring(i, i+1).equals("-")) {
                input.replace("-", "");
                input = input.substring(0, i) + input.substring(i+1, i+2).toUpperCase() + input.substring(i+2);
            }
            if(input.substring(i, i+1).equals(" ")) {
                input.replace(" ", "");
                input = input.substring(0, i) + input.substring(i+1, i+2).toUpperCase() + input.substring(i+2);
            }
        }
        return input;
    }
}

并使用 SnakeYAML Parser 实现(我也对其进行了测试)

Constructor c = new Constructor(map);
c.setPropertyUtils(new PropertyUtils() {
    @Override
    public Property getProperty(Class<? extends Object> type, String name){
        if ( name.indexOf('-') > -1 ) {
            name = CamelCase.camelize(name);
        }
        return super.getProperty(type, name);
        }
    });
    parser = new Yaml(c);
    configFile = new File(FileConstants.getConfigDir() + relativePath);
}

【讨论】:

    猜你喜欢
    • 2019-11-19
    • 2017-09-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2018-09-03
    • 2012-11-20
    • 2016-02-16
    • 2010-10-25
    相关资源
    最近更新 更多