문자열이 주어졌을 때 구분자를 잘 분리하는 방법은 없을까?
@DisplayName("입력받은 당첨번호를 쉼표, 공백 구분자와 정수를 분리한다")
@Test
void generateWinningTest() throws Exception{
String given = "1,2,3,4,5,6";
List<Integer> winning = new ArrayList<>();
// split으로 두번 잘라서 배열에서 조회한다 (On²)
// 스트림을 활용한다
Arrays.stream(given.split(",\\s")).forEach(item -> {})
for (int i = 0; i < 6; i++) {
winning.add();
}
}
나의 생각
split(",")
, split(" ")
분리된 문자열들이 배열에 담겨서 분리된 정수 추출 가능아 짜증나네 나보다 코딩 잘하는 기계 젠장
참고) \\s\
는 공백 구분자를 표현하는 정규식이라고 한다
이왕 배우는 김에 좀 더 딥하게 정리해보자
출처
방법 1) String.split() 구분자
String name = `김개발, 어플주, 건물주, 치킨';
String[] array = name.split(",");
System.out.println(Arrays.toString(array));
예상 결과는?
[김개발, 어플주, 김통장, 김건물]
방법2) String.split() 정규식
String name = `김 개발, 어.플주, 건 물 주, 치킨';
String[] array = name.split("\\s+|,\\s*\\.\\s*");
System.out.println(Arrays.toString(array));
예상 결과는?
[김, 개, 발, 어, 플, 주, 건, 물, 주, 치, 킨]
방법3) String.split() 공백제거
String name = `김 개발, 어.플주, 건 물 주, 치킨';
String[] array = name.trim().split.("\\s*,\\s*");
System.out.println(Arrays.toString(array));
\\s*,\\s*
정규식은 구분 기호 주변의 추가 공백을 처리[김개발, 어플주, 건물주, 치킨]
동일한 코드를 stream으로 구현 가능하다고..??
Arrays.stream(name,split(","))
.map(String::trim)
.toArray(String[]::new);
System.out.println(Arrays.toString(array));
방법4) Pattern.split()
String name = `김 개발, 어.플주, 건 물 주, 치킨';
Pattern pattern = Pattern.compile
System.out.println(Arrays.toString(array));
방법5)