Поскольку Java, похоже, не поддерживает преобразование регистра с использованием \l
, вы можете попробовать этот метод:
public static String toSnake(String s) {
return s.replaceAll("([A-Z]|\\d+)", "_$1") // add _ before a cap letter or sequence of digits
.replaceAll("_+", "_") // replace multiple underscores with one
.replaceAll("^_", "") // remove leading underscores
.toLowerCase();
}
// Test
Arrays.asList(
"camelCase01", "anotherCamelCase", "version1",
"version1_2", "PascalCase", "123SlySnake")
.forEach(s -> System.out.println(s + " -> " + toSnake(s)));
Вывод
camelCase01 -> camel_case_01
anotherCamelCase -> another_camel_case
version1 -> version_1
version1_2 -> version_1_2
PascalCase -> pascal_case
123SlySnake -> 123_sly_snake