Skip to content

Commit 4eb5c52

Browse files
vunamtientienvn
and
tienvn
authored
BAEL-8928-Convert-camel-to-snake-case (#18168)
* BAEL-8928-Convert-camel-to-snake-case * BAEL-8928-Convert-camel-to-snake-case * BAEL-8928-Convert-camel-to-snake-case --------- Co-authored-by: tienvn <[email protected]>
1 parent f8f6db7 commit 4eb5c52

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.baeldung.cameltosnakecase;
2+
3+
public class CamelToSnakeCaseConverter {
4+
5+
public static String convertCamelCaseToSnake(String input) {
6+
StringBuilder result = new StringBuilder();
7+
for (char c : input.toCharArray()) {
8+
if (Character.isUpperCase(c)) {
9+
result.append("_").append(Character.toLowerCase(c));
10+
} else {
11+
result.append(c);
12+
}
13+
}
14+
return result.toString();
15+
}
16+
17+
public static String convertCamelCaseToSnakeRegex(String input) {
18+
return input
19+
.replaceAll("([A-Z])(?=[A-Z])", "$1_")
20+
.replaceAll("([a-z])([A-Z])", "$1_$2")
21+
.toLowerCase();
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.baeldung.cameltosnakecase;
2+
3+
import org.junit.jupiter.api.Assertions;
4+
import org.junit.jupiter.api.Test;
5+
6+
public class CamelToSnakeCaseConverterUnitTest {
7+
8+
@Test
9+
public void whenConvertNormalCamelCase_thenGetCorrectSnakeCase() {
10+
String input = "convertCamelCase";
11+
String expected = "convert_camel_case";
12+
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnake(input));
13+
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnakeRegex(input));
14+
}
15+
16+
@Test
17+
public void whenConvertNotNormalCamelCase_thenGetCorrectSnakeCase() {
18+
String input = "convertCCamelCase";
19+
String expected = "convert_c_camel_case";
20+
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnake(input));
21+
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnakeRegex(input));
22+
}
23+
24+
@Test
25+
public void whenConvertAlreadySnakeCase_thenGetUnchangedSnakeCase() {
26+
String input = "snake_case";
27+
String expected = "snake_case";
28+
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnake(input));
29+
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnakeRegex(input));
30+
}
31+
32+
@Test
33+
public void whenConvertAllLowerCaseString_thenGetUnchangedString() {
34+
String input = "snakecase";
35+
String expected = "snakecase";
36+
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnake(input));
37+
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnakeRegex(input));
38+
}
39+
40+
@Test
41+
public void whenConvertOtherEdgeCases_thenGetCorrectSnakeCases() {
42+
// Blank string
43+
Assertions.assertEquals("", CamelToSnakeCaseConverter.convertCamelCaseToSnake(""));
44+
Assertions.assertEquals("", CamelToSnakeCaseConverter.convertCamelCaseToSnakeRegex(""));
45+
46+
// Special character
47+
String input = "sn@keCase#";
48+
String expected = "sn@ke_case#";
49+
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnake(input));
50+
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnakeRegex(input));
51+
}
52+
}

0 commit comments

Comments
 (0)