58. [Java] 0 떼기
https://school.programmers.co.kr/learn/courses/30/lessons/181847
- 정수로 이루어진 문자열 n_str이 주어질 때,
- n_str의 가장 왼쪽에 처음으로 등장하는 0들을 뗀 문자열을 return
- 2 ≤ n_str ≤ 10
- n_str이 "0"으로만 이루어진 경우는 없다.
정답코드 (정규식)
class Solution {
public String solution(String n_str) {
// 시작부터 연속된 0제거하는 정규식
return n_str.replaceFirst("^0+", "");
}
}
✅ String.replaceFirst();
자바의 String 클래스에서 제공하는 메서드로, 정규식에 일치하는 첫 번째 부분 문자열만 찾아서 바꾸는 기능이다.
String result = 원본문자열.replaceFirst("정규식", "바꿀문자열");
✅ 자주 쓰이는 정규식 패턴
- ^ : 문자열의 시작 위치
- + : 앞 문자가 1번 이상 반복
- * : 앞 문자가 0번 이상 반복
- [a-z] : 소문자 알파벳 하나
- \\d : 숫자 (0\~9) 하나
- . : 아무 문자 하나 (줄바꿈 제외)
예제1_ 왼쪽의 0 제거
String input = "00012345";
String result = input.replaceFirst("^0+", ""); // 시작(^) 위치의 0이 하나 이상(+) 반복되는 부분 제거
System.out.println(result); // 출력: 12345
예제2_ 가장 앞의 알파벳만 제거
String input = "abc123abc";
String result = input.replaceFirst("^[a-zA-Z]", "");
System.out.println(result); // 출력: bc123abc (첫 번째 알파벳만 제거됨)
예제3_ -
문자들 제거
String input = "---Hello-World";
String result = input.replaceFirst("^-+", ""); // 문자열 시작에서 연속된 - 제거
System.out.println(result); // 출력: Hello-World
정답코드 (substring)
class Solution {
public String solution(String str) {
// 앞쪽의 '0'을 제거하고 싶을 때
char ch = '0';
int idx = 0;
// 문자열 앞에서부터 ch와 같은 문자가 연속되면 인덱스를 증가하는 로직
// idx 인덱스가 문자열의 길이보다 작고,d idx 위치의 문자가 ch(0)이면
// 인덱스 증가
while (idx < str.length() && str.charAt(idx) == ch) {
idx++;
}
// ch가 반복된 앞부분을 잘라낸 나머지를 반환
return str.substring(idx);
}
}
- 문자열의 맨 앞부터 검사 시작
-
ch
와 같은 문자(0
이면idx++
-
ch
가 아닌 문자가 처음 등장하면 루프 종료 - 그 인덱스부터 끝까지
substring
으로 자르기
여기서 중요한 부분은 이 코드이다.
str.charAt(idx) == ch
이 말은 현재 위치의 문자가 ch 일때만 idx++를 계속 한다는 뜻이다.
즉, 문자가 ch 가 아니면 이 조건이 false가 되고, 그 순간 while문이 종료된다.
참고로 양쪽 자르기도 함께 알아보자. 오른쪽 0은 어떻게 제거하는지 궁금하기 때문이다.
public String trimZeros(String str) {
int start = 0;
int end = str.length();
// 왼쪽 0 제거
while (start < end && str.charAt(start) == '0') {
start++;
}
// 오른쪽 0 제거
while (end > start && str.charAt(end - 1) == '0') {
end--;
}
return str.substring(start, end);
}