Преобразовать одиночный char в строку в нижний регистр

Мне нравится "угадывать" имена атрибутов из методов getter. Поэтому 'getSomeAttribute' преобразуется в 'someAttribute'.

Обычно я делаю что-то вроде

String attributeName = Character.toLowerCase(methodName.indexOf(3)) 
                       + methodName.substring(4);

Довольно уродливый, не так ли? Я обычно скрываю его в методе, но знает ли кто-нибудь лучшее решение?

Ответ 1

Я думаю, ваше решение в порядке. Я не думаю, что есть более простой способ сделать это.

Ответ 2

uncapitalize метод Commons Lang поможет вам, но я не думаю, что ваше решение настолько грубо.

Ответ 3

uncapitalize из commons lang будет сделайте это:

String attributeName = StringUtils.uncapitalize(methodName.substring(3));

Мне нужно много денег, но если вам не нравится эта дополнительная банка, вы можете скопировать метод. Как вы можете видеть в этом, они делают это как вы:

public static String uncapitalize(String str) {
    int strLen;
    if (str == null || (strLen = str.length()) == 0) {
        return str;
    }
    return new StringBuffer(strLen)
        .append(Character.toLowerCase(str.charAt(0)))
        .append(str.substring(1))
        .toString();
}

Ответ 4

Посмотрите API JavaBeans:

BeanInfo info = Introspector.getBeanInfo(bean
       .getClass(), Object.class);
for (PropertyDescriptor propertyDesc : info
       .getPropertyDescriptors()) {
  String name = propertyDesc.getName();
}

Также см. decapitalize.

Ответ 5

Его стоит помнить, что

  • Не все методы getXXX являются геттерами, например. double getSqrt (double x), void getup().
  • методы, которые возвращают логическое значение, начинаются с is и не принимают аргумент, могут быть getter, например. boolean isActive().

Ответ 6

Для символьного буфера вы можете применить приведенный ниже код:

int i = 0;
for(char x : buffer) {
    buffer[i] = Character.toLowerCase(x);
    i++;
}

Протестировано и функции:)

Ответ 7

Выглядит хорошо. Да, это выглядит многословным, но подумайте о том, что вы пытаетесь сделать, и о том, что подумает другой программист, если они попытаются понять, что этот код пытается сделать. Во всяком случае, я бы сделал это дольше, добавив, что вы делаете (угадывая имена атрибутов из методов getter) в качестве комментария.