[자라기] - 자바 구분자 분리하는 방법

김주형·2024년 11월 1일
0

자라기

목록 보기
23/23

문자열이 주어졌을 때 구분자를 잘 분리하는 방법은 없을까?

@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(","), split(" ")분리된 문자열들이 배열에 담겨서 분리된 정수 추출 가능
    • 근데 이 방법은 On²이네
    • 스트림을 활용하면 어떻게 될까
  • 아 짜증나네 나보다 코딩 잘하는 기계 젠장

  • 참고) \\s\는 공백 구분자를 표현하는 정규식이라고 한다

이왕 배우는 김에 좀 더 딥하게 정리해보자
출처

  • 사실 그래도 열심히 구글링해서 찾은 척.. 은 해야할 것 같아서 죄책감에..

참고) java.lang.string.split()

  • String.split()은 자바에서 문자열을 분리하기 위해 사용하는 방법이며 인자로 구분자 혹은 정규식 추가가 가능

방법 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));
  • trim() 메서드는 문자열의 선행 및 후행 공백을 제거
  • \\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)

참고

profile
도광양회

0개의 댓글