Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีเพิ่ม Underscore ก่อนตัวอักษรพิมพ์ใหญ่ทุกตัวใน String Java

วิธีที่ 1: ใช้ StringBuffer + Character.isUpperCase()

วนลูปตรวจสอบแต่ละตัวอักษร หากเป็นพิมพ์ใหญ่ ใส่ underscore ก่อน

ตัวอย่าง


public class AddUnderscoreBeforeCapital {
    public static void main(String[] args) {
        String str = "HelloHowAreYouWelcome";
        StringBuffer sb = new StringBuffer();
        
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (Character.isUpperCase(ch)) {
                sb.append('_');
            }
            sb.append(ch);
        }
        
        String result = sb.toString();
        System.out.println(result); // _Hello_How_Are_You_Welcome
    }
}

ผลลัพธ์


_Hello_How_Are_You_Welcome

วิธีที่ 2: ใช้ Regular Expression replaceAll() (กระชับกว่า)

Regex ([A-Z]) capture group ตัวพิมพ์ใหญ่ แทนที่ด้วย _$1 (underscore + captured group)

ตัวอย่าง


public class AddUnderscoreBeforeCapitalRegex {
    public static void main(String[] args) {
        String str = "HelloHowAreYouWelcome";
        String result = str.replaceAll("([A-Z])", "_$1");
        System.out.println(result); // _Hello_How_Are_You_Welcome
    }
}

ผลลัพธ์


_Hello_How_Are_You_Welcome

ปัญหา: ตัวอักษรแรกจะมี underscore นำหน้า

ทั้งสองวิธีจะเพิ่ม underscore หน้าตัวแรกเสมอ หากไม่ต้องการ:

แก้ด้วย StringBuffer


for (int i = 0; i < str.length(); i++) {
    char ch = str.charAt(i);
    if (Character.isUpperCase(ch) && i > 0) { // เพิ่มเงื่อนไข i > 0
        sb.append('_');
    }
    sb.append(ch);
}

แก้ด้วย Regex (lookahead)


// (?

กรณีพิเศษ: ตัวเลขและสัญลักษณ์


String str = "HelloWorld123Test";
str.replaceAll("(?

การประยุกต์: CamelCase to snake_case


public static String camelToSnake(String camelCase) {
    return camelCase
        .replaceAll("(?

สรุป

วิธีข้อดีข้อเสีย
StringBuffer + Loopเข้าใจง่าย ควบคุม logic ได้ละเอียดโค้ดยาวกว่า
Regex replaceAllกระชับ 1 บรรทัดRegex อาจยากต่อการ maintain