Java에서 숫자 문자열 앞에 붙어 있는 불필요한 0(선행 제로)을 제거해야 하는 경우가 종종 있습니다. 이럴 때 String 클래스의 replaceAll() 메서드와 정규식을 활용하면 간단하게 처리할 수 있습니다.
replaceAll() 메서드는 두 개의 문자열 인수를 받습니다. 첫 번째는 매칭에 사용할 정규식(regular expression), 두 번째는 대체할 문자열(replacement String)이며, 정규식과 일치하는 부분을 지정한 문자열로 치환합니다.
선행 0을 찾는 정규식
문자열의 선행 0을 매칭하기 위한 정규식은 다음과 같습니다.
^0+(?!$)
이 정규식의 의미를 살펴보면 다음과 같습니다.
- ^0+ : 문자열의 시작(^)부터 하나 이상(+) 연속된 0을 찾습니다.
- (?!$) : 부정형 전방 탐색(negative lookahead)으로, 문자열의 끝($)이 아닌 위치만 매칭합니다. 덕분에 값이 "0"처럼 0 하나뿐인 경우에도 전체가 삭제되지 않고 보존됩니다.
사용 방법
문자열에서 선행 0을 제거하려면 위 정규식을 첫 번째 인수로, 빈 문자열 ""을 두 번째 인수로 전달하면 됩니다. 그러면 일치된 선행 0들이 모두 제거됩니다.
예제 코드
다음 Java 프로그램은 사용자로부터 정수 값을 문자열 형태로 입력받은 뒤, 정규식을 사용해 선행 0을 제거하고 결과를 출력합니다.
import java.util.Scanner;
public class LeadingZeroesRE {
public static String removeLeadingZeroes(String str) {
String strPattern = "^0+(?!$)";
str = str.replaceAll(strPattern, "");
return str;
}
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
System.out.println("Enter an integer: ");
String num = sc.next();
String result = LeadingZeroesRE.removeLeadingZeroes(num);
System.out.println(result);
}
}코드 설명
- removeLeadingZeroes(String str) : 정규식 패턴 "^0+(?!$)"를 정의하고, replaceAll()을 호출하여 입력 문자열의 선행 0을 빈 문자열로 치환한 후 반환합니다.
- main 메서드 : Scanner를 통해 사용자로부터 정수를 문자열로 입력받아 removeLeadingZeroes() 메서드에 전달하고, 처리된 결과를 콘솔에 출력합니다.
실행 결과
Enter an integer: 000012336000 12336000
실행 결과를 보면 입력값 "000012336000"에서 맨 앞의 연속된 0 네 개가 제거되어 "12336000"이 출력된 것을 확인할 수 있습니다. 주의할 점은 중간에 있는 0들은 유지되며, 오직 문자열 앞부분의 0만 제거된다는 것입니다.