Practice3
===
문제 설명
---
자바의 String 자료형에는 많은 연산자 기능들이 있다.
프로그래밍의 기본기를 익히기 위해 일부 연산자들을 제한하고 다음의 기능을 구현하려 한다.
- String 의 replace 기능 구현
- String의 replace, indexOf, contains를 사용하지 않고 구현한다.
입출력 예시
입력 문자열fromto출력
"Hello Java, Nice to meet you! Java is fun!" | "Java" | "자바" | "Hello 자바, Nice to meet you! 자바 is fun!" |
POP | P | W | WOW |
package Java_18_1.src;
public class Practice3 {
public static String solution(char[] str, char[] find, char[] to) {
int idx = 0;
String replaceStr = ""; // 최종 변경 데이터를 담음
char[] replaceBucket = str.clone(); // 임시 사용 공간
do {
idx = findIndex(replaceBucket, find);
if (idx != -1) {
for (int i = 0; i < idx; i++) {
replaceStr += replaceBucket[i];
}
for (int i = 0; i < to.length; i++) {
replaceStr += to[i];
}
for (int i = idx + find.length; i < replaceBucket.length; i++) {
replaceStr += replaceBucket[i];
}
replaceBucket = replaceStr.toCharArray();
replaceStr = "";
}
} while (idx != -1); //findIndex 함수에서 매칭되는 함수를 찾지 못했을 때 -1이 반환됨
replaceStr = new String(replaceBucket);
return replaceStr;
}
public static int findIndex(char[] str, char[] find) {
int idx = -1;
boolean isMatch = false;
for (int i = 0; i < str.length; i++) {
// 인덱스의 첫글자와 같은지 && str 길이가 find 길이보다 짧으면 없는거니까 길이 확인
if (str[i] == find[0] && str.length - i >= find.length) {
isMatch = true;
// 일단 첫 글자는 같은걸 확인했으니 1부터 시작
for (int j = 1; j < find.length; j++) {
if (str[i + j] != find[j]) {
isMatch = false;
break;
}
}
}
if (isMatch) {
idx = i;
break;
}
}
return idx;
}
public static void main(String[] args) {
// Test code
String str = "Hello Java, Nice to meet you! Java is fun!";
String find = "Java";
String to = "자바";
// 기존 String replace
System.out.println(str.replace(find, to));
// 자체 구현 replace
char[] strExArr = str.toCharArray(); // .toCharArray() : String 문자열을 char형 배열로 바꿔서 반환해주는 메서드
char[] findArr = find.toCharArray();
char[] toArr = to.toCharArray();
System.out.println(solution(strExArr, findArr, toArr));
strExArr = "POP".toCharArray();
findArr = "P".toCharArray();
toArr = "W".toCharArray();
System.out.println(solution(strExArr, findArr, toArr));
}
}
'개발 공부 > 문제와 풀이' 카테고리의 다른 글
Java) 연습문제 2-1 (0) | 2024.08.10 |
---|---|
Java) 물을 가장 많이 담을 수 있는 면적 구하기 (0) | 2024.08.09 |
객체 지향 프로그래밍 문제와 풀이 (0) | 2024.03.23 |
기본형과 참조형 문제 풀이 (0) | 2024.03.16 |
김영한의 실전 자바 기본편 / Sec 1) 문제와 풀이 (0) | 2024.02.16 |