이 글에서는 Java에서 문자열의 선행 0(leading zeros)을 제거하는 방법을 알아봅니다. 숫자 데이터를 문자열 형태로 다루다 보면 앞에 붙은 불필요한 0 때문에 곤란한 경우가 종종 있는데, 간단한 반복문과 replace() 메서드만 있으면 이를 손쉽게 처리할 수 있습니다.
아래는 실제 동작 예시입니다.
입력값
Input string: 00000445566
기대 출력값
Result: 445566
알고리즘
- 프로그램을 시작합니다.
- 문자열 변수
input_string과 StringBuffer 객체string_buffer를 선언합니다. - 변수 값을 정의(초기화)합니다.
- while 루프로 문자열의 문자를 하나씩 검사하며, '0'으로 된 구간을 ""(빈 문자열)로 대체합니다.
- 결과를 출력합니다.
- 프로그램을 종료합니다.
예제 1: main 함수에서 모든 로직 처리하기
첫 번째 예제는 모든 연산을 main 함수 안에서 한 번에 처리하는 방식입니다.
import java.util.Arrays;
import java.util.List;
public class RemoveZero {
public static void main (String[] args) {
System.out.println("Required packages have been imported");
String input_string = "00000445566";
System.out.println("\nThe string is defined as: " +input_string);
int i = 0;
while (i < input_string.length() && input_string.charAt(i) == '0')
i++;
StringBuffer string_buffer = new StringBuffer(input_string);
string_buffer.replace(0, i, "");
input_string = string_buffer.toString();
System.out.println(input_string);
}
}
출력 결과
Required packages have been imported The string is defined as: 00000445566 445566
예제 2: 객체 지향 방식으로 메서드 분리하기
두 번째 예제는 객체 지향 프로그래밍(OOP) 스타일로, 0 제거 로직을 별도의 메서드로 캡슐화했습니다. 이렇게 하면 코드의 재사용성과 가독성이 크게 향상됩니다.
import java.util.Arrays;
import java.util.List;
public class RemoveZero {
public static String remove_zero(String input_string) {
int i = 0;
while (i < input_string.length() && input_string.charAt(i) == '0')
i++;
StringBuffer string_buffer = new StringBuffer(input_string);
string_buffer.replace(0, i, "");
return string_buffer.toString();
}
public static void main (String[] args) {
System.out.println("Required packages have been imported");
String input_string = "00000445566";
System.out.println("\nThe string is defined as: " +input_string);
input_string = remove_zero(input_string);
System.out.println(input_string);
}
}
출력 결과
Required packages have been imported The string is defined as: 00000445566 445566
참고: 정규식으로 더 간결하게 처리하기
반복문 없이 정규식을 사용하면 단 한 줄로 같은 결과를 얻을 수 있습니다.
String result = input_string.replaceFirst("^0+(?!$)", "");
^0+는 문자열 맨 앞에 연속해서 나오는 0을 찾고, (?!$)는 전체가 0으로만 이루어진 경우 마지막 한 자리는 남겨두도록 하는 조건입니다. 예를 들어 "000"은 빈 문자열이 아니라 "0"으로 유지됩니다.
또한 값이 int나 long 범위 안에 들어간다면 Integer.parseInt() 또는 Long.parseLong()으로 변환한 뒤 다시 문자열로 만드는 방법도 활용할 수 있습니다. 상황에 맞는 방식을 선택하면 됩니다.