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 방식, 코드 간결성 면에서 정규식 방식을 상황에 맞게 선택하면 됩니다.