용쌀
42
2018-08-13 02:55:40 작성 2018-08-13 02:59:13 수정됨
10
2931

replaceAll과 replace 함수 차이가 정확히 뭔가요?


다른글들 읽어봐도 이해가 잘 안갑니다...

str= str.replace(")", ""); replace로 이렇게 선언하면 에러가 안나는데

str= str.replaceAll(")", ""); 이걸로 선언하면 에러가 나옵니다.

구글링하다가 찾은거 보면 \,$로 구분자로 만들어서 여러 기호들 한번에 처리하는거 같은데..

실제로 해보니깐 안됩니다.. 이유가 뭔지 알 수 있을까요? ㅠㅠ

0
  • 답변 10

  • greatstone
    6
    2018-08-13 03:27:01
    replaceAll 은 정규표현식을 쓰는 함수입니다. 정규표현식은 간단히 설명이 어렵네요. 정규 표현식 또는 regular expression으로 검색해 보세요
  • 호랭
    244
    2018-08-13 03:41:32

    replace는 받는 자료형이 char이고 replaceAll은 받는 자료형이 string입니다.

    char은 )을 받을 때 ')' 로 받고 string은 )을 받을 때 ")"로 받습니다.

    즉슨 char에선 )가 어떠한 의미도 없는 문자 그대로 저장하고

    string에선 )가 str= str.replaceAll(")", ""); 빨간 색의 )과 같은 의미 받습니다. 컴퓨터는 넣어주신 )가 어떤 문법으로 쓰이는 기호라고 판단하다는 거죠.


    자바라는 가정하에 해결방법은 \\)을 replaceAll에 넣어주시면 됩니다.

  • greatstone
    6
    2018-08-13 09:19:25 작성 2018-08-13 10:09:12 수정됨

    @호랭 replace 함수도 char를 받는 함수와 CharSequence를 받는 함수 2개가 있습니다.

    즉, str = str.replace(")", "")으로 코드를 작성하면 )를 모두 찾아 제거한 문자열이 리턴됩니다.

    replaceAll은 정규표현식을 인자로 받습니다. 정규 표현식에서는 괄호 문자를 ')' 토큰으로 사용하기 때문에 호랭님이 말씀하신대로 "\\)"와 같이 입력해야 합니다.

  • LichKing
    16k
    2018-08-13 10:03:05

    greatstone 님 말씀대로 replace는 2개가 오버로딩되어있고, replaceAll은 정규표현식을 인자로 받습니다.

    replace는 char도 받고 CharSequence도 받게되어있기때문에 char와 String 모두 넣을수있습니다.

    (String이 CharSequence의 하위 타입)


  • ksshim86
    1k
    2018-08-13 11:28:09

    LichKing 님 스샷에 사용한 툴이 뭔가요? 이클립스는 아닌거 같은데

  • LichKing
    16k
    2018-08-13 11:30:26
    인텔리제이에요
  • ksshim86
    1k
    2018-08-13 11:31:30

    LichKing 사용해보고싶긴한데 회사에서 개인라이센스로 사용못하죠?

  • greatstone
    6
    2018-08-13 12:55:05

    인텔리제이 커뮤니티 버전은 오픈소스(Apache 2.0)이라 회사에서도 쓰실 수 있습니다.

  • 와이즈번
    83
    2018-08-13 13:11:35 작성 2018-08-13 13:17:35 수정됨
  • ksshim86
    1k
    2018-08-13 13:55:29

    아하... 답변 감사합니다!!

  • 로그인을 하시면 답변을 등록할 수 있습니다.