Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Lớp CaseFormat trong Java (Guava)

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_CAMELlowerCamelCasemyVariableName
LOWER_HYPHENlower-hyphen-case (kebab-case)my-variable-name
LOWER_UNDERSCORElower_underscore_case (snake_case)my_variable_name
UPPER_CAMELUpperCamelCase (PascalCase)MyClassName
UPPER_UNDERSCOREUPPER_UNDERSCORE_CASE (CONSTANT_CASE)MY_CONSTANT_NAME

Phương thức chính

Phương thứcMô 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 ý

  • CaseFormat chỉ 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.