在 Java 中將駝峰式大小寫轉換為蛇形大小寫
瀏覽人數:83最近更新:
1. 概述
駝峰式和蛇形式是程式設計中經常使用的兩種常見命名約定。駝峰式大小寫使用大寫字母表示新單字的開頭 (camelCaseExample),而蛇形大小寫則使用下劃線分隔單字 (snake_case_example)。
在本教程中,我們將探討如何在 Java 中實作此類轉換。
2. 理解轉換
當將駝峰式字串轉換為蛇形式字串時,我們需要:
- 辨識單字之間的界限
- 在每個邊界處插入底線 (`
_
`) - 確保所有字母均為小寫
例如:
- 輸入:“轉換駝峰命名法”
- 輸出:“convert_camel_case”
考慮到這一點,讓我們研究一下實現這種轉變的方法。
3. 使用手動方法
首先,最簡單的方法是迭代字串中的字元並在遇到大寫字母時添加下劃線:
public static String convertCamelCaseToSnake(String input) {
StringBuilder result = new StringBuilder();
for (char c : input.toCharArray()) {
if (Character.isUpperCase(c)) {
result.append("_").append(Character.toLowerCase(c));
} else {
result.append(c);
}
}
return result.toString();
}
現在讓我們分解一下我們在這個方法中所做的事情:
- 遍歷字串中的每個字符
- 當遇到大寫字母時,在前面添加下劃線並將其轉換為小寫字母
- 對於所有其他字符,直接附加它們
最後,讓我們測試一下我們的實作:
@Test
public void whenConvertNormalCamelCase_thenGetCorrectSnakeCase() {
String input = "convertCamelCase";
String expected = "convert_camel_case";
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnake(input));
}
@Test
public void whenConvertNotNormalCamelCase_thenGetCorrectSnakeCase() {
String input = "convertCCamelCase";
String expected = "convert_c_camel_case";
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnake(input));
}
@Test
public void whenConvertAlreadySnakeCase_thenGetUnchangedSnakeCase() {
String input = "snake_case";
String expected = "snake_case";
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnake(input));
}
@Test
public void whenConvertAllLowerCaseString_thenGetUnchangedString() {
String input = "snakecase";
String expected = "snakecase";
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnake(input));
}
@Test
public void whenConvertOtherEdgeCases_thenGetCorrectSnakeCases() {
// Blank string
Assertions.assertEquals("", CamelToSnakeCaseConverter.convertCamelCaseToSnake(""));
// Special character
String input = "sn@keCase#";
String expected = "sn@ke_case#";
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnake(input));
}
4. 使用正規表示式
或者,正規表示式透過定義大寫字母的模式並替換它們來簡化任務:
public static String convertCamelCaseToSnakeRegex(String input) {
return input
.replaceAll("([AZ])(?=[AZ])", "$1_")
.replaceAll("([az])([AZ])", "$1_$2")
.toLowerCase();
}
它的工作原理如下:
-
replaceAll(“([AZ])(?=[AZ])”, “$1_”)
方法在相鄰大寫字母之間加上底線。 -
replaceAll(“([az])([AZ])”, “$1_$2”)
方法在小寫字母後面的大寫字母之前加上底線。 - 最後,將整個結果轉換為小寫。
我們也驗證一下這個方法:
@Test
public void whenConvertNormalCamelCase_thenGetCorrectSnakeCase() {
String input = "convertCamelCase";
String expected = "convert_camel_case";
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnakeRegex(input));
}
@Test
public void whenConvertNotNormalCamelCase_thenGetCorrectSnakeCase() {
String input = "convertCCamelCase";
String expected = "convert_c_camel_case";
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnakeRegex(input));
}
@Test
public void whenConvertAlreadySnakeCase_thenGetUnchangedSnakeCase() {
String input = "snake_case";
String expected = "snake_case";
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnakeRegex(input));
}
@Test
public void whenConvertAllLowerCaseString_thenGetUnchangedString() {
String input = "snakecase";
String expected = "snakecase";
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnakeRegex(input));
}
@Test
public void whenConvertOtherEdgeCases_thenGetCorrectSnakeCases() {
// Blank string
Assertions.assertEquals("", CamelToSnakeCaseConverter.convertCamelCaseToSnakeRegex(""));
// Special character
String input = "sn@keCase#";
String expected = "sn@ke_case#";
Assertions.assertEquals(expected, CamelToSnakeCaseConverter.convertCamelCaseToSnakeRegex(input));
}
5. 處理邊緣情況
將駝峰式字串轉換為蛇式命名法時,必須處理各種邊緣情況,例如:
- 空字串:確保我們的函數傳回空字串
- 所有小寫字串:輸入應保持不受影響
- 字串已經是蛇形大小寫:確保函數不會更改此類字串
- 特殊字符:他們應該不受影響
六、結論
總之,我們探索了兩種在 Java 中將駝峰式大小寫轉換為蛇形大小寫的方法:使用迭代的手動方法和利用正規表示式的更簡潔的方法。
本教學的範例程式碼可以在 GitHub 上找到。
本作品係原創或者翻譯,採用《署名-非商業性使用-禁止演繹4.0國際》許可協議