문제
https://school.programmers.co.kr/learn/courses/30/lessons/120864
풀이
import java.util.regex.*;
class Solution {
public int solution(String my_string) {
int sum = 0;
Matcher matcher = Pattern.compile("\\d+").matcher(my_string);
while (matcher.find()) {
sum += Integer.parseInt(matcher.group());
}
return sum;
}
}
class Solution {
public int solution(String my_string) {
int sum = 0;
StringBuilder number = new StringBuilder();
for (char ch : my_string.toCharArray()) {
if (Character.isDigit(ch)) {
number.append(ch); // 숫자면 이어붙이기
} else {
if (number.length() > 0) {
sum += Integer.parseInt(number.toString()); // 숫자 변환 후 더하기
number.setLength(0); // StringBuilder 초기화
}
}
}
// 마지막이 숫자로 끝날 경우
if (number.length() > 0) {
sum += Integer.parseInt(number.toString());
}
return sum;
}
}
자주 쓰이는 정규식 패턴 정리
패턴 | 의미 | 예시 매칭 |
\d | 숫자 1자리 (0~9) | 1, 9, 3 |
\d+ | 연속된 숫자 하나 이상 | 123, 42 |
\D | 숫자가 아닌 문자 1개 | a, @, Z |
\w | 알파벳 + 숫자 + _ | a, 9, _ |
\W | \w가 아닌 것 | !, *, - |
. | 아무 문자 1개 (줄바꿈 제외) | a, 1, # |
[abc] | a 또는 b 또는 c | a, b, c |
[^abc] | a, b, c 제외한 문자 | d, z |
[a-z] | 소문자 a~z | b, m |
[A-Z] | 대문자 A~Z | F, X |
[0-9] | 숫자 0~9 | 4, 7 |
* | 0회 이상 반복 | a* → "", a, aa, aaa |
+ | 1회 이상 반복 | a+ → a, aa, aaa |
? | 0 또는 1회 | a? → "", a |
{n} | n회 반복 | a{3} → aaa |
{n,} | n회 이상 반복 | a{2,} → aa, aaa, ... |
{n,m} | n~m회 반복 | a{2,4} → aa, aaa, aaaa |
^ | 문자열 시작 | ^abc → abc123, X: xabc |
$ | 문자열 끝 | 123$ → abc123, X: 123abc |
숫자만 찾고 싶을 때 쓰는 정규식
정규식 | 설명 |
\d+ | 숫자 1자리 이상 (자연수 찾기) |
\d{1,3} | 1~3자리 숫자 |
[1-9]\d* | 선행 0 없는 자연수 |
[^0]\d* | 첫 자리가 0이 아닌 숫자 |
- 예시: "abc123def456"에서 숫자 추출
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("abc123def456");
while (matcher.find()) {
System.out.println(matcher.group()); // 출력: 123, 456
}
실생활 예시
상황 | 정규식 |
이메일 검증 | [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,} |
전화번호 | \\d{3}-\\d{3,4}-\\d{4} |
우편번호 (5자리) | \\d{5} |
소문자만 허용 | ^[a-z]+$ |
영문자+숫자 조합 | ^[a-zA-Z0-9]+$ |
팁
- Java에서는 백슬래시 \를 이스케이프해야 해서 \\d 이렇게 씀
- 정규식은 한 번 익혀두면 문자열 처리에서 압도적인 효율을 줍니다.
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] Lv.0 | 최댓값 만들기 (2) | Java (0) | 2025.10.03 |
---|---|
[Programmers] Lv.0 | 다항식 더하기 | Java (0) | 2025.10.02 |
[Programmers] Lv.0 | 안전지대 | Java (0) | 2025.09.30 |
[Programmers] Lv.0 | 삼각형의 완성조건 (2) | Java (0) | 2025.09.29 |
[Programmers] Lv.0 | 외계어 사전 | Java (0) | 2025.09.27 |
댓글