728x90
알게된 점
정규 표현식 사용하여 특정 문자 추출하기
Pattern, Matcher
Pattern : 정규 표현식에 대한 대상 문자열을 검증하거나 활용하기 위해 사용되는 클래스
Matcher : 대상 문자열과 패턴이 일치하는 부분을 찾는데 사용되는 클래스
예시
String input = "//'\n1;2;3";
// "//" "\n" 사이 단어 추출
Pattern pattern = Pattern.compile("//(.*?)(?=\\\\n)");
Matcher matcher = pattern.matcher(input);
// 조건에 해당하는 단어가 있을 경우, 추출하여 저장하고, 기존 문자열에서 제거한다.
if(matcher.find()) {
String customSep = matcher.group(1); // ';'
sep.add(escapeRegexSpecialChars(customSep)); // ';' 저장
this.input = input.replace(matcher.group(0), "").replace("\\n", "").trim(); // input = "1;2;3"
}
- Pattern 클래스를 선언한다. 클래스 내의 compile 메소드를 사용하여 주어진 정규 표현식으로부터 패턴을 만든다.
- 여기서는 '//'부터 '\n'(문자열을 의미함. 개행문자가 아님) 까지의 문자열이 존재하는지를 확인한다.
- (.*?) : '.'는 모든 문자를, *는 없거나 여러개 있거나, ?는 없거나 하나 있거나 를 의미한다. 따라서 null, 공백을 포함한 그 어떤 문자든 모두 포함한다.
- (?=\\\\n) : 문자열 '\n'이 있는지 확인하는 조건식이다.
'\n' 만 쓰면 개행문자로 인식되어 문자열 '\n'은 인식하지 못한다. 따라서 이스케이프 문자를 활용해야한다.
'\\' 처럼 \를 두 번 쓰면 '\'를 의미한다. 따라서 \\\\는 '\\'를 의미하고, \\는 '\'이므로, \\\\n == '\n'을 뜻한다.
- matcher.find() : 패턴에 해당하는 부분이 input에 존재하는지 찾고 있으면 true를 반환한다.
- matcher.group(1) : 패턴에 해당하는 단어. 여기서는 (.*?)에 해당하는 부분을 의미한다.
- matcher.group(0) == matcher.group() : 패턴 전체를 의미한다. 여기서는 "//;" 이다. ('\n'은 개행문자라 그런지 인식하지 못해서 후에 따로 제거했다.)
배열을 문자열로, 문자열을 배열로.
join()
배열을 문자열로 합친다. 이때 사이사이 원하는 문자를 넣어 합칠 수도 있다.
예시
String[] sep = {".", ";", ":"};
String regex = String.join("|", sep); // regex = ".|;|:"
sep 배열 원소 사이사이에 "|" 를 넣어 하나의 문자열로 만든다.
split()
구분자 하나 또는 여러개로 문자열을 분리할 수 있다.
예시
String input = "1;2:3";
String[] numArr = input.split(regex); // == input.split(",|;|:");
// numArr = ["1", "2", "3"]
- split() 안에 넣은 문자를 기준으로 분리하여 배열을 만들 수 있다.
- '|'와 같은 기호를 써서 정규 표현식을 활용하여 구분자를 여러개 입력할 수도 있다.
- input.split(",|;|:")는 ',' 또는 ';' 또는 ':'를 구분자로 하여 문자열을 분리해달라는 의미이다.
반응형
'공부' 카테고리의 다른 글
[GitHub] 포크와 클론 (0) | 2024.11.26 |
---|---|
[Javascript] 자바스크립트 입출력 (백준, vscode) (0) | 2024.06.23 |
[Python] 소수 2자리 출력하기 (반올림, 올림, 버림) (0) | 2024.06.12 |
[JAVA] Math.random 랜덤함수 사용법 (0) | 2023.08.16 |