Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как перевести camelCase в snake_case и обратно

Короткий ответ

Вставьте подчёркивание перед каждой заглавной буквой, которой предшествует строчная или цифра, и приведите к нижнему регистру:

void main() {
    String name = "userFirstName";
    IO.println(name.replaceAll("([a-z0-9])([A-Z])", "$1_$2").toLowerCase());
}

Результат:

user_first_name

Аббревиатуры

Для имён вроде parseHTTPResponse добавьте второе правило — между аббревиатурой и следующим словом:

String toSnake(String name) {
    return name.replaceAll("([A-Z]+)([A-Z][a-z])", "$1_$2")
            .replaceAll("([a-z0-9])([A-Z])", "$1_$2")
            .toLowerCase();
}
 
void main() {
    IO.println(toSnake("parseHTTPResponse"));
    IO.println(toSnake("orderId2Value"));
}

Результат:

parse_http_response
order_id2_value

Обратно в camelCase

Разбейте по подчёркиванию и сделайте заглавной первую букву каждой части, кроме первой:

String toCamel(String name) {
    String[] parts = name.split("_");
    var result = new StringBuilder(parts[0]);
    for (int i = 1; i < parts.length; i++) {
        result.append(Character.toUpperCase(parts[i].charAt(0))).append(parts[i].substring(1));
    }
    return result.toString();
}
 
void main() {
    IO.println(toCamel("user_first_name"));
}

Результат:

userFirstName

Частая ошибка

Вставлять подчёркивание перед каждой заглавной буквой без условия. Тогда имя с заглавной буквы начнётся с _, а аббревиатура распадётся на буквы:

void main() {
    IO.println("UserID".replaceAll("([A-Z])", "_$1").toLowerCase());
}

Результат:

_user_i_d

Функции из этого ответа

  • String.replaceAll() — Заменяет все совпадения регулярного выражения.
  • String.toLowerCase() — Возвращает копию строки, где все буквы строчные.
  • String.split() — Разбивает строку на массив частей по разделителю.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.