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

Java 정규식으로 문자열의 선행 0 제거하기

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만 제거된다는 것입니다.