합리적 낙관주의자

[Java] String에 숫자가 포함되어 있는지 판별하는 방법 본문

Computer Thinking 🌟/Self study 📖

[Java] String에 숫자가 포함되어 있는지 판별하는 방법

sroa.chin 2025. 4. 29. 19:34

Java에서 String에 숫자가 포함되어 있는지 확인하는 방법은 여러 가지가 있다. 

아래 방법 중, 제일 많이 쓰이는건 정규식과 Character.isDigit 이라고 한다. 두 가지 모두 알고 있어 알고리즘에 용이하게 사용하자.

 

방법 장점 단점
정규식 matches 코드 간결, 직관적 정규식에 익숙해야 함
Character.isDigit 커스텀 로직 구현 용이 루프 필요
Stream API 코드 간결, Java API Java 8 이상 필요
Pattern/Matcher 정규식 재사용에 효율적 코드 복잡
replaceAll 간단한 비교 비효율적

 

1. 정규식 (Regular Expression)
정규식을 이용하여 문자열에 숫자가 하나라도 포함되어 있는지 확인하는 방법
String.matches() 메서드를 활용하며, 패턴은 .*[0-9].* 또는 .*\\d.*를 사용

String str = "abc123";
boolean hasNumber = str.matches(".*[0-9].*"); // true
// 또는
boolean hasNumber = str.matches(".*\\d.*"); // true



2. Character 클래스의 isDigit()
문자열을 문자 배열로 변환한 후, 각 문자에 대해 Character.isDigit()을 사용하여 숫자인지 확인하는 방법
for문을 돌며 확인하고, 숫자 있을 시에 break으로 루프를 빠져 나올 수 있다. 

String str = "abc123";
boolean hasNumber = false;
for (char c : str.toCharArray()) {
    if (Character.isDigit(c)) {
        hasNumber = true;
        break;
    }
}


3. Java 8 Stream API 
Java 8 이상에서는 Stream API를 활용

String str = "abc123";
boolean hasNumber = str.chars().anyMatch(Character::isDigit); // true


4. Pattern 및 Matcher 
java.util.regex.Pattern과 Matcher를 사용하며, 정규식을 반복적으로 사용할 경우 이 방법이 효율적이다.

import java.util.regex.*;

String str = "abc123";
Pattern pattern = Pattern.compile("\\d");
Matcher matcher = pattern.matcher(str);
boolean hasNumber = matcher.find(); // true


5. replaceAll() 
문자열에서 숫자를 모두 제거한 뒤, 길이 차이를 비교하여 숫자 포함 여부를 알 수 있는 방법

String str = "abc123";
boolean hasNumber = str.length() != str.replaceAll("\\d", "").length(); // true