(((( 내 생각 흐름 ))))
my_string을 문자 하나씩 배열에 담고 --> split("")
인덱스 값으로 배열을 잘라서 --> Arrays.copyOfRange()
자른 배열을 문자열로 변환한 뒤 --> String.join()
해당 문자열에 overwrite_string을 이어붙이고 --> StringBuilder.append()
my_string의 길이가 이어붙인 문자열의 길이보다 길면
뒤의 String도 이어 붙이자.
A + B
A + B + C
두 가지 경우를 가정해서 코드를 짜야 함.
통과가 되긴 했다. 그러긴 했는데..
public static String solution(String my_string, String overwrite_string, int s) {
// 문자 하나씩 배열에 넣기
String[] msList = my_string.split("");
// 배열 자른 복사본 만들기
String[] arr1 = Arrays.copyOfRange(msList, 0, s);
// 배열을 문자열로 변환하기
String ms1 = String.join("", arr1);
// 문자열 이어붙이기
StringBuilder sb = new StringBuilder();
sb.append(ms1).append(overwrite_string);
String answer = sb.toString();
// 뒷글자 조건 걸기
if(my_string.length() > answer.length()) {
String[] arr2 = Arrays.copyOfRange(msList, answer.length(), msList.length);
String ms2 = String.join("", arr2);
answer = answer + ms2;
}
return answer;
}
아니 근데 왜 나는 이걸 배열로 풀었을까???
문자열 자체를 자르면 되잖아..
substring...
아니
하
public String solution(String my_string, String overwrite_string, int s) {
String before = my_string.substring(0, s);
String after = my_string.substring(s + overwrite_string.length());
return before + overwrite_string + after;
}
코드 3줄이면 되는거를 ...
왜..
왜?
아마 전에 풀었던 문제에서 배열 넣는거를 써서 그랬나봐...
그리고 substring이 익숙치 않아서일지도,,,
그래도.. 찾아보면서 많이 배웠으니까.. 정리라도 하자 ^_ㅠ
1. substring
인덱스 값으로 문자열을 자르는 함수.
String str = "HelloWorld";
String before = str.substring(0, 5); // Hello
String after = str.substring(5); // World
substring(시작점)
substring(시작점, 끝점)
이때 주의할 점은 인덱스이다.
괄호에 들어갈 인덱스는 배열 인덱스를 매기는 것 처럼 0부터 시작한다.
H | e | l | l | o | W | o | r | l | d |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
시작점은 자기 자신을 포함하고
끝점은 자기 자신을 포함하지 않는다.
2. Arrays.copyOfRange()
배열을 잘라서 복사본으로 만드는 메서드.
int[] arr = {0, 1, 2, 3, 4, 5};
int index = 3;
int[] arr1 = Arrays.copyOfRange(arr, 0, index);
int[] arr2 = Arrays.copyOfRange(arr, index, arr.length);
System.out.println(Arrays.toString(arr1)); // [0, 1, 2]
System.out.println(Arrays.toString(arr2)); // [3, 4, 5]
Arrays.copyOfRange(arr, 시작점, 끝점);
인덱스는 substring과 원리가 같다.
시작점은 자기 자신을 포함하고
끝점은 포함하지 않는다.
이 메서드는 결국 반환값이 배열이기 때문에
값을 출력할 때에는 Arrays.toString() 으로 해야 한다.
(문자열과 결합하려면 문자열로 변환하는 과정이 필요하다. --> String.join 이다!)
이와 유사한 배열 복사 메서드는
Arrays.copyOf(원본 배열, 복사할 길이)
System.arraycopy(복사할 배열, 복사 시작점, 붙여넣기할 배열, 붙여넣기 시작점, 복사할 길이)
가 있다.
자세한 내용은 아래 글 참조.
3. String.join()
문자열 배열을 문자열로 변환하는 함수.
String.join( 구분 기호, 문자열 배열 )
String[] arr = {"Hello", "World"};
String str1 = String.join("_", arr); // Hello_World
String str2 = String.join("", arr); // HelloWorld