Есть какой-нибудь элегантный способ разобрать строку в стиле верблюда в верхнем регистре в java? - PullRequest
0 голосов
/ 13 мая 2019

Мне нужно разобрать экземпляр enum из строки. Проблема в том, что у меня есть строка ввода в стиле верблюда, например, docType и enum в постоянном стиле, например DOC_TYPE.

Насколько я знаю, java требует точного соответствия при разборе enum, поэтому я пытаюсь найти элегантный способ решения этой проблемы.

Ответы [ 2 ]

4 голосов
/ 13 мая 2019

Apache commons предоставляет удобный служебный метод для разделения строки в случае верблюда: Apache commons

Я использовал это, чтобы сделать именно то, что вам нужно:

final String[] words = StringUtils.splitByCharacterTypeCamelCase(camelCase);
final String name = String.join("_", words).toUpperCase();
2 голосов
/ 13 мая 2019

Вы можете написать статический метод в вашем перечислении, который соответствует и возвращает значение записи перечисления.

public enum SomeEnum {
    SOME_VALUE("someValue"),
    OTHER_VALUE("otherValue");

    private final String camelCaseValue;

    private static final SomeEnum[] values = values();

    SomeEnum(String camelCaseValue) {
        this.camelCaseValue = camelCaseValue;
    }

    public static SomeEnum fromCamelCase(String camelCaseValue) {
        for (SomeEnum value : values) {
            if(value.camelCaseValue.equals(camelCaseValue)) {
                return value;
            }
        }
        return SOME_VALUE;
    }
}

Конечно, вам не нужно возвращать SOME_VALUE как значение по умолчанию. Вы можете вернуть ноль или сгенерировать исключение, если совпадений нет. Если отображение может быть закодировано динамически (например, удалить подчеркивание, а затем сравнить без учета регистра), вам даже не нужно сохранять поле camelCaseValue.

Я просто хотел показать общую идею использования статического метода для получения записи enum.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...