47. [Java] x 사이의 개수
https://school.programmers.co.kr/learn/courses/30/lessons/181867
- 문자열 myString이 주어진다.
- myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return
- 1 ≤ myString의 길이 ≤ 100,000
- myString은 알파벳 소문자로 이루어진 문자열입니다.
정답코드
class Solution {
public int[] solution(String myString) {
String[] str = myString.split("x", -1); // 빈 문자열 포함
int[] answer = new int[str.length];
for (int i = 0; i < str.length; i++) {
answer[i] = str[i].length();
}
return answer;
}
}
✅ split(String regex, int limit)
String[] arr = myString.split("x", -1);
자바의 split(String regex, int limit)
에서 limit
은 아래를 의미한다.
limit 값 | 동작 설명 |
---|---|
양수 N | 최대 N개의 요소까지만 자름 |
0 | 끝의 빈 문자열은 제거 됨 |
음수 ( | 끝의 빈 문자열도 포함해서 전부 자름 |
-1이 인자로 들어가는 이유
예시:
String s = "a,b,,";
s.split(","); // 결과: ["a", "b"]
s.split(",", -1); // 결과: ["a", "b", "", ""] ✅
→ 기본 split()
은 맨 뒤의 빈 문자열은 제거해버린다.
→ 그래서 -1
을 넣으면 빈 문자열까지도 빠짐없이 포함시켜준다.
오답
class Solution {
public int[] solution(String myString) {
String[] str = myString.split("x");
int[] answer = new int[str.length];
for (int i = 0; i < str.length; i++) {
answer[i] = str[i].length();
}
return answer;
}
}
처음에는 split("x")로 매개변수 하나짜리 메서드를 써서 코드를 작성했기 때문에 마지막 공백값이 카운트 안 되서 실행결과와 기댓값이 다르게 나왔다. 맨 끝 "x"
뒤에 빈 문자열 ""
하나가 있어야 하는데 split()은 기본적으로 마지막 빈 문자열을 제거해버려서 그래서 기대했던 6개 대신 5개가 나오는 것이다.
split()
에 두 번째 인자로 -1
을 넣으면 빈 문자열도 포함해서 자른다. 매개변수 2개짜리 코드로 수정해주었다.
String[] str = myString.split("x", -1);