CaseFormat là một lớp tiện ích trong thư viện Google Guava dùng để chuyển đổi giữa các định dạng chữ (case format) ASCII phổ biến trong lập trình.
Lưu ý: Bảng phương thức trong nội dung gốc có vẻ bị nhầm lẫn với lớp NumberFormat (các phương thức format, clone, equals...). Dưới đây là sửa chính xác cho CaseFormat.
Các định dạng hỗ trợ (Enum constants)
| Hằng số | Mô tả | Ví dụ |
|---|---|---|
LOWER_CAMEL | lowerCamelCase | myVariableName |
LOWER_HYPHEN | lower-hyphen-case (kebab-case) | my-variable-name |
LOWER_UNDERSCORE | lower_underscore_case (snake_case) | my_variable_name |
UPPER_CAMEL | UpperCamelCase (PascalCase) | MyClassName |
UPPER_UNDERSCORE | UPPER_UNDERSCORE_CASE (CONSTANT_CASE) | MY_CONSTANT_NAME |
Phương thức chính
| Phương thức | Mô tả |
|---|---|
to(CaseFormat format, String str) |
Chuyển chuỗi str từ định dạng hiện tại sang format đích. |
to(CaseFormat format, StringBuilder sb) |
Chuyển đổi trực tiếp trên StringBuilder (hiệu quả hơn). |
Ví dụ minh họa
import com.google.common.base.CaseFormat;
public class GuavaTester {
public static void main(String args[]) {
String data = "test_data";
// snake_case -> lowerCamelCase
System.out.println(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "test_data"));
// Output: testData
// kebab-case -> lowerCamelCase
System.out.println(CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, "test-data"));
// Output: testData
// UPPER_UNDERSCORE -> UpperCamelCase
System.out.println(CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "test_data"));
// Output: TestData
// Các chuyển đổi khác
System.out.println(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, "myVariableName")); // my_variable_name
System.out.println(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, "MyClassName")); // my-class-name
System.out.println(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_UNDERSCORE, "my_field")); // MY_FIELD
}
}
Kết quả
testData testData TestData my_variable_name my-class-name MY_FIELD
Hiện đại hóa: Không cần Guava (Java thuần)
Các chuyển đổi phổ biến có thể tự viết hoặc dùng thư viện nhẹ hơn. Dưới đây là các hàm helper đơn giản:
import java.util.Locale;
public class CaseFormatUtils {
// snake_case -> camelCase
public static String snakeToCamel(String snake) {
String[] parts = snake.split("_");
StringBuilder sb = new StringBuilder(parts[0].toLowerCase(Locale.ROOT));
for (int i = 1; i < parts.length; i++) {
String p = parts[i];
if (!p.isEmpty()) {
sb.append(Character.toUpperCase(p.charAt(0)))
.append(p.substring(1).toLowerCase(Locale.ROOT));
}
}
return sb.toString();
}
// camelCase -> snake_case
public static String camelToSnake(String camel) {
return camel.replaceAll("([a-z])([A-Z])", "$1_$2").toLowerCase(Locale.ROOT);
}
// kebab-case -> camelCase
public static String kebabToCamel(String kebab) {
return snakeToCamel(kebab.replace('-', '_'));
}
// PascalCase -> snake_case
public static String pascalToSnake(String pascal) {
return camelToSnake(Character.toLowerCase(pascal.charAt(0)) + pascal.substring(1));
}
// Test
public static void main(String[] args) {
System.out.println(snakeToCamel("test_data")); // testData
System.out.println(camelToSnake("testData")); // test_data
System.out.println(kebabToCamel("test-data")); // testData
System.out.println(pascalToSnake("TestData")); // test_data
}
}
Thư viện thay thế nhẹ hơn Guava
- Apache Commons Text:
CaseUtils(toCamelCase, toSnakeCase...) - Spring Framework:
StringUtils.uncapitalize,CaseFormat(spring-core) - Kotlin:
String.toCamelCase(),String.toSnakeCase()built-in.
Lưu ý
CaseFormatchỉ hoạt động tốt với ASCII. Xử lý Unicode (tiếng Việt có dấu) có thể không chính xác.- Guava là thư viện nặng (~300KB), cân nhắc nếu chỉ cần chuyển đổi case.
- Từ Java 21+, có thể dùng
StringTemplate/ pattern matching cho logic phức tạp hơn.