Windows 운영체제에서는 "\r\n"이 줄 구분자(개행 문자)로 사용됩니다. 이때 정규식 "\\r?\\n"은 이러한 줄 끝(line ending)과 일치하도록 작성된 패턴입니다. 여기서 \\r?는 캐리지 리턴(CR)이 있어도 없어도 된다는 의미이며, \\n은 줄 바꿈(LF)을 나타냅니다. 덕분에 Windows뿐 아니라 Linux, macOS 등 서로 다른 개행 문자 방식을 가진 환경에서도 동일하게 동작합니다.
String 클래스의 split() 메서드는 정규식을 매개변수로 받아, 현재 문자열을 해당 패턴이 일치하는 지점을 기준으로 토큰 배열로 분할합니다. 두 일치 지점 사이에 있는 문자열이 하나의 토큰으로 처리되는 방식입니다.
따라서 줄 끝을 구분자로 사용해 문자열을 분할하고 싶다면, 입력 문자열에 대해 split() 메서드를 호출하고 위에서 소개한 정규식을 매개변수로 전달하면 됩니다.
예제 코드
import java.util.Scanner;
public class RegexExample {
public static void main(String[] args) {
System.out.println("Enter your input string: ");
Scanner sc = new Scanner(System.in);
String input = " sample text \r\n line1 \r\n line2 \r\n line3 \r\n line4";
String[] strArray = input.split("\\r?\\n");
for (int i = 0; i < strArray.length; i++) {
System.out.println(strArray[i]);
}
}
}실행 결과
Enter your input string: sample text line1 line2 line3 line4
추가 팁
Java 8 이상에서는 String.lines() 메서드나 Files.readAllLines()를 활용하는 방법도 있지만, 정규식 기반의 split() 방식은 복잡한 구분자 조건이 필요한 경우에도 유연하게 대응할 수 있다는 장점이 있습니다. 또한 결과 배열에 빈 문자열이 포함되지 않길 원한다면 split("\\r?\\n") 대신 split("[\\r\\n]+")처럼 연속된 개행 문자를 한 번에 처리하는 패턴을 사용할 수도 있습니다.