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

자바 정규식으로 문자열의 각 단어 첫 글자만 출력하는 방법


이 글에서는 정규식(Regular Expression)을 활용하여 문자열 내 각 단어의 첫 글자를 추출하고 출력하는 방법을 알아봅니다.

정규식은 검색 패턴을 형성하는 문자들의 시퀀스입니다. 단일 문자일 수도 있고, 더 복잡한 패턴일 수도 있습니다. 정규식은 특수 문법으로 구성된 패턴을 기반으로 다른 문자열이나 문자열 집합과 일치 여부를 확인하거나 찾는 데 도움을 주며, 텍스트와 데이터를 검색·편집·조작할 때 널리 사용됩니다.

아래에서 실제 동작 결과를 먼저 확인해 보겠습니다.

입력값

입력 문자열 1: Java Program
입력 문자열 2: Joy of learning

기대 출력값

결과 1: JP
결과 2: Jol

알고리즘

1단계 - 시작
2단계 - 입력 문자열 두 개(input_string_1, input_string_2)를 선언하고, 정규식 Pattern(string_pattern)과 Matcher 객체(string_matcher)를 선언한다.
3단계 - 값을 정의한다.
4단계 - while 루프를 사용해 string_matcher.group()으로 각 단어의 첫 글자를 가져온다.
5단계 - 결과를 출력한다.
6단계 - 종료

예제 1: main 메서드에서 모든 로직 처리하기

아래 예제는 모든 연산을 하나의 main 메서드 안에서 처리하는 방식입니다.

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
    public static void main(String[] args) {
        System.out.println("필요한 패키지를 가져왔습니다");
        String input_string_1 = "Java Program";
        System.out.println("\n첫 번째 문자열: " + input_string_1);
        Pattern string_pattern = Pattern.compile("\\b[a-zA-Z]");
        Matcher string_matcher = string_pattern.matcher(input_string_1);
        System.out.println("문자열의 각 단어 첫 글자:");
        while (string_matcher.find())
            System.out.print(string_matcher.group());
        System.out.println();
        String input_string_2 = "Joy of learning";
        System.out.println("\n두 번째 문자열: " + input_string_2);
        Matcher string_matcher_2 = string_pattern.matcher(input_string_2);
        System.out.println("문자열의 각 단어 첫 글자:");
        while (string_matcher_2.find())
            System.out.print(string_matcher_2.group());
        System.out.println();
    }
}

출력 결과

필요한 패키지를 가져왔습니다

첫 번째 문자열: Java Program
문자열의 각 단어 첫 글자:
JP

두 번째 문자열: Joy of learning
문자열의 각 단어 첫 글자:
Jol

예제 2: 객체 지향 방식으로 메서드 분리하기

다음 예제는 반복되는 로직을 별도의 메서드로 분리해 재사용성을 높인 객체 지향 프로그래밍 스타일입니다.

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex {
    static void print_regex_string(String s) {
        Pattern string_pattern = Pattern.compile("\\b[a-zA-Z]");
        Matcher string_matcher = string_pattern.matcher(s);
        System.out.println("문자열의 각 단어 첫 글자:");
        while (string_matcher.find())
            System.out.print(string_matcher.group());
        System.out.println();
    }
    public static void main(String[] args) {
        System.out.println("필요한 패키지를 가져왔습니다");
        String input_string_1 = "Java Program";
        System.out.println("\n첫 번째 문자열: " + input_string_1);
        print_regex_string(input_string_1);
        String input_string_2 = "Joy of learning";
        System.out.println("\n두 번째 문자열: " + input_string_2);
        print_regex_string(input_string_2);
    }
}

출력 결과

필요한 패키지를 가져왔습니다

첫 번째 문자열: Java Program
문자열의 각 단어 첫 글자:
JP

두 번째 문자열: Joy of learning
문자열의 각 단어 첫 글자:
Jol

핵심 포인트 정리

여기서 사용된 정규식 \\b[a-zA-Z]를 살펴보면, \\b는 단어 경계(word boundary)를 의미하며, [a-zA-Z]는 알파벳 한 글자를 나타냅니다. 즉, 이 패턴은 각 단어가 시작되는 위치의 첫 글자만 매칭합니다. Matcher 객체의 find() 메서드를 반복 호출하며 group()으로 매칭된 문자를 꺼내면, 문자열 전체에서 각 단어의 첫 글자만 순서대로 얻을 수 있습니다.