Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 문자열에서 각 대문자 앞에 밑줄 추가하는 방법 – StringBuffer와 정규식 활용


StringBuffer 클래스 활용하기

StringBuffer를 사용하면 문자열을 한 글자씩 검사하면서 원하는 위치에 새로운 문자를 손쉽게 추가할 수 있습니다. 각 대문자 앞에 밑줄(_)을 삽입하는 절차는 다음과 같습니다.

  • 빈 StringBuffer 객체를 생성합니다.

  • Character 클래스의 isUpperCase() 메서드는 인자로 받은 문자가 대문자이면 true를 반환합니다. 이 메서드를 이용해 문자열의 모든 문자를 하나씩 검사합니다.

  • 검사한 문자가 대문자라면, append() 메서드로 해당 문자 앞에 밑줄을 먼저 추가한 뒤 문자 자체를 덧붙입니다.

예제 코드

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

실행 결과

_Hello_How_Are_You_Welcome

첫 번째 문자 'H' 역시 대문자이기 때문에 결과 문자열의 맨 앞에도 밑줄이 붙는다는 점에 유의하세요.

정규 표현식 활용하기

String 클래스의 replaceAll() 메서드는 정규 표현식과 치환 문자열 두 개를 인자로 받아, 패턴에 일치하는 모든 부분을 지정한 문자열로 교체합니다. 반복문 없이 한 줄의 코드로 동일한 작업을 처리할 수 있어 더욱 간결합니다.

예제 코드

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

실행 결과

_Hello_How_Are_You_Welcome

정규식 "()([A-Z])"는 빈 그룹 뒤에 등장하는 대문자를 캡처하고, 치환 문자열 "$1_$2"는 첫 번째 그룹(빈 문자열)과 밑줄, 두 번째 그룹(대문자)을 순서대로 연결하여 대문자 앞에 밑줄을 삽입합니다. 문자열 변환이 빈번하다면 가독성과 성능 면에서 StringBuffer 방식, 코드 간결성 면에서 정규식 방식을 상황에 맞게 선택하면 됩니다.