From 6932fc110e1a6d734675a09fd6f5d889be1250b7 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 27 Jun 2026 20:51:07 +0100 Subject: Add lowerCamelCaseToSnakeCase --- .../java/org/zwobble/hobgoblin/compiler/util/Casing.java | 14 ++++++++++++++ .../org/zwobble/hobgoblin/compiler/util/CasingTests.java | 14 ++++++++++++++ 2 files changed, 28 insertions(+) (limited to 'src') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java b/src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java index ac0871b..e99aec6 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/util/Casing.java @@ -24,4 +24,18 @@ public class Casing { 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)) { + snakeCase.append('_'); + } + snakeCase.append(Character.toLowerCase(character)); + } + + return snakeCase.toString(); + } } diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java index fbdf429..561ec8a 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/util/CasingTests.java @@ -20,4 +20,18 @@ public class CasingTests { assertThat(result, equalTo(expectedUpperCase)); } + + @ParameterizedTest + @CsvSource({ + "a,a", + "abc,abc", + "abcDef,abc_def", + "abDeFg,ab_de_fg", + "a0,a_0", + }) + public void lowerCamelCaseToSnakeCase(String lowerCamelCase, String expectedUpperCase) { + var result = Casing.lowerCamelCaseToSnakeCase(lowerCamelCase); + + assertThat(result, equalTo(expectedUpperCase)); + } } -- cgit v1.2.3