문자열 문제를 풀다 보면 문자열에서 어떤 특정 부분을 찾거나 다른 문자열로 치환해야 되는 경우가 많이 있다. 문자 대소문자 변환 메서드 toUpperCase(), toLowerCase()도 치환 메서드 중 하나이다.
문자 찾기와 바꾸기
문자열 내 특정 부분을 찾는 메서드와 바꾸는 메서드를 알아보자.
문자열 포함여부를 검사하는 메서드
메서드 | 반환형 | 내용 |
contains(CharSequence s) | boolean | 전달받은 문자열이 원본 문자열에 있는지 검사 |
startsWith(String prefix) | boolean | 원본 문자열이 전달받은 문자열로 시작하는 지 검사 |
endWith(String suffix) | boolean | 원본 문자열이 전달받은 문자열로 끝나는지 검사 |
indexOf(String str) | int | 원본 문자열이 전달받은 문자열로 끝나는지 검사 |
문자열 치환 메서드
메서드 | 반환형 | 내용 |
replace(char oldChar, char newChar) | String | 원본 문자열의 oldChar 문자들을 newChar 문자로 치환한 문자열을 반환 |
replace(CharSequence target, CharSequence replacement) | String | 원본 문자열에서 등장하는 targer 문자열을 replacement 문자열로 치환해서 반환하는 메서드 |
CharSequence는 문자열을 나타내는 인터페이스이다. 그러므로 String 클래스와 StringBuilder 등 문자열을 나타내는 클래스들과 동일하다고 생각해도 무방하다.
프로그래머스 문제 풀이
https://school.programmers.co.kr/learn/courses/30/lessons/12916?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문자열 내 p와 y의 개수

이 문제를 푸는 방법을 생각해 보자.
1. 문자열을 모두 소문자(or 대문자)로 변환
2. "p"의 개수 세기
- 문자열에 등장하는 모든 p를 문자열 ""로 치환
- 원본 문자열과 변환된 문자열의 길이 차이로 p의 개수 구하기
3. 2와같은 방식으로 y값 개수 세기
4. 구한 p와 y 값의 개수 비교
구현 코드
class Solution {
boolean solution(String s) {
// 1. 문자열을 모두 소문자로 변환
s = s.toLowerCase();
// 2. "p"의 개수 세기
int ps = s.length() - s.replace("p", "").length();
// 3. "y"의 개수 세기
int ys = s.length() - s.replace("y", "").length();
return ps == ys;
}
}
물론 toCharArray()를 이용하며 직접 순회하는 방식도 있지만 본문의 문자열 메서드를 이용한 방식으로 구현했다고 생각하면 된다.
2. 숫자 문자열과 영단어
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이 문제를 풀이 흐름을 생각해 보자.
1. 각 인덱스 값에 해당하는 영단어가 저장되어 있는 영단어 문자열 배열을 구성한다.
2. 영단어 배열을 순회하며 입력 문자열에 등장하는 모든 영단어로 치환한 문자열을 생성한다.
3. 변환된 문자열을 정수로 변환 후 반환한다.
구현 코드
import java.util.*;
class Solution {
public int solution(String s) {
String[] strArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
for(int i = 0; i < strArr.length; i++) {
s = s.replace(strArr[i], Integer.toString(i));
}
return Integer.parseInt(s);
}
}
참조
'코딩테스트 > 이론' 카테고리의 다른 글
[JAVA] 정수와 문자열 입력값의 각 자리수 합 구하기 (0) | 2024.11.28 |
---|---|
[코딩테스트] 문자열 활용 - 문자열 뒤집기(특정단어) with Java (0) | 2024.08.30 |
[코딩테스트] 문자열 with Java (0) | 2024.08.26 |
[코딩테스트] 동적계획법과 냅색(Knapsack) 문제 (0) | 2023.09.26 |
[코딩테스트] 구현(Implement)과 dx, dy 테크닉 (0) | 2023.09.21 |