package org.zwobble.hobgoblin.compiler.util; import java.util.Locale; public class Casing { private Casing() {} public static String lowerCamelCaseToUpperCamelCase(String name) { return name.substring(0, 1).toUpperCase(Locale.ROOT) + name.substring(1); } public static String upperCamelCaseToLowerCamelCase(String name) { return name.substring(0, 1).toLowerCase(Locale.ROOT) + name.substring(1); } public static String lowerCamelCaseToUpperCase(String lowerCamelCase) { var upperCase = new StringBuilder(); for (var characterIndex = 0; characterIndex < lowerCamelCase.length(); characterIndex++) { var character = lowerCamelCase.charAt(characterIndex); if (Character.isUpperCase(character) || (Character.isDigit(character) && !Character.isDigit(lowerCamelCase.charAt(characterIndex - 1)))) { upperCase.append('_'); upperCase.append(character); } else { upperCase.append(Character.toUpperCase(character)); } } return upperCase.toString(); } public static String lowerCamelCaseToSnakeCase(String lowerCamelCase) { var snakeCase = new StringBuilder(); for (var characterIndex = 0; characterIndex < lowerCamelCase.length(); characterIndex++) { var character = lowerCamelCase.charAt(characterIndex); if (Character.isUpperCase(character) || (Character.isDigit(character) && !Character.isDigit(lowerCamelCase.charAt(characterIndex - 1)))) { snakeCase.append('_'); } snakeCase.append(Character.toLowerCase(character)); } return snakeCase.toString(); } public static String upperCamelCaseToSnakeCase(String lowerCamelCase) { var snakeCase = new StringBuilder(); for (var characterIndex = 0; characterIndex < lowerCamelCase.length(); characterIndex++) { var character = lowerCamelCase.charAt(characterIndex); if (characterIndex != 0 && Character.isUpperCase(character) || (Character.isDigit(character) && !Character.isDigit(lowerCamelCase.charAt(characterIndex - 1)))) { snakeCase.append('_'); } snakeCase.append(Character.toLowerCase(character)); } return snakeCase.toString(); } }