이 글에서는 정규식(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()으로 매칭된 문자를 꺼내면, 문자열 전체에서 각 단어의 첫 글자만 순서대로 얻을 수 있습니다.