JAVA

[Java] 문자열 치환(공백, 특수문자) replace() 사용법

번잔중 2022. 9. 27. 22:31

replace()

문자열에 포함된 특정 문자나 부분 문자열을 바꾸고 없애고 싶을 때가 있다.(마음이 그렇다는건 아님) 보통 누가 시켜서 하는 일일텐데, 알고리즘 문제의 조건이 대부분일 것이다.

replace 메서드는 이런 상황에 마주치게 됐을 때, 우리를 도와주는 좋은 친구이다. replace()와 더불어 replaceAll(), replaceFirst()까지 알아보자.

replace()

replace 메서드는 원하는 문자로 문자열을 치환할 수 있다. replace의 괄호 안에는 String과 char가 둘 다 올 수 있다. 여기서 String은 엄밀히 말해 인터페이스인 charSequence를 구현한 클래스이다. 직접 코드를 보면서 이해해보자!

String str = "예림이, 그 패 봐봐!";

// char를 변경
str = str.replace(',', '!');
System.out.println(str);

String str1 = "호이가 계속되면? 권리인줄 알아요."

// String을 변경
str1 = str1.replace("권리", "둘리");
System.out.println(str1);

// 출력 결과
예림이! 그 패 봐봐!
호이가 계속되면? 둘리인줄 알아요.

 

replaceAll()

replaceAll() 또한 문자열에 있는 문자를 원하는 대로 치환해줄 수 있다. char 타입은 인자로 사용할 수 없고, String은 가능하다. 사용하는 것을 보면 둘 다 비슷해보이는데, 차이가 있다. 그 내용은 아래에 작성하겠다.

String str = "답이 없다. : 소크라테스";
str = str.replaceAll(":", "-");
System.out.println(str);

// 출력 결과
답이 없다. - 소크라테스

 

replace()와 replaceAll()의 차이점

이 둘 사이의 차이는 메서드 괄호에 어떤 타입이 들어가는지다.

  • replace(기존 문자, 바꿀 문자)
  • replaceAll(정규식, 바꿀 문자)


여기서 잠깐, 정규식(정규표현식)에 대해 잘 모르고 있다면 간단하게 설명을 읽어보는 것이 좋다!

정규표현식(Regular Expression, regex)
특정한 규칙을 가진 문자열의 집합을 표현할 때 사용하는 방식으로 검색이나 치환에 이용된다.

이 정규 표현식에도 문법이 존재하는데, replace()를 사용하는 것처럼 문자를 치환하려고 특수문자를 잘못 입력하면 정규식으로 인식하여 원하는 결과를 얻지 못할 수도 있다.

String str = "답이 없다 . 소크라테스";
str = str.replaceAll(".", "-");
System.out.println(str);

String str1 = "답이 없다 . 소크라테스";
str1 = str.replace(".", "-");
System.out.println(str1);

// 출력 결과
-------------
답이 없다 - 소크라테스

정규표현식에서 포인터 연산자(.)은 임의의 한 문자를 의미하기 때문에 문자열에 있는 모든 문자를 -로 치환한 것이다.

인텔리제이에서는 친절하게 정규표현식이라고 경고까지 해준다.

replaceFirst()

replaceFirsrt는 문자열에서 가장 처음 한 번만 등장하는 문자를 치환해주고 싶을 때, 사용할 수 있다.

String str = "이게 팀이야? 어?! 이게 팀이야!!!";
str = str.replaceFirst("팀", "말");
System.out.println(str);

// 출력 결과
이게 말이야? 어?! 이게 팀이야!!!

읽어주셔서 감사합니다.