| English | 의미 |
|---|---|
| StringIndexOutOfBoundsException/strɪŋ ˈɪndeks ˈaʊtəv baʊndz ekˈsepʃn/ | StringIndexOutOfBoundsException |
문자열 루프하기
- String을 처리하려면, 인덱스를 **
0**부터 **length() - 1**까지 루프합니다. for (int i = 0; i < s.length(); i++) { ... s.substring(i, i+1) ... }- **
s.substring(i, i+1)**은 인덱스 **i**에 있는 한 글자 String을 제공합니다. - 이는 순서대로 모든 문자를 방문합니다 — 대부분의 String 알고리즘의 기초입니다.
문자 세기
- 루프와 **
if**을 결합하여 일치하는 문자를 세십시오. - "모음 세기": 루프하고, 현재 문자가 모음이면 **
if**하고, **count++**합니다. - 2.9의 accumulator 패턴은 String에 직접 적용됩니다.
- **
.equals()**으로 문자를 비교하고, **==**으로 비교하지 마십시오.
새 String 만들기
- 텍스트를 변환하려면, new String을 **
+**으로 만들어야 합니다. 왜냐하면 String은 불변이기 때문입니다. - 루프 내에서 **
String result = "";**한 다음 **result = result + something;**합니다. - "String 뒤집기": 끝에서 시작하여 각 문자를 연결합니다.
- 원본은 변하지 않습니다 — 새로운 String을 축적합니다.
인덱스 경계
- 유효한 인덱스는 **
0**부터 **length() - 1**까지입니다. 범위를 벗어날 경우 StringIndexOutOfBoundsException이 발생합니다. - **
s.substring(i, i+1)**은 **i < s.length()**일 때만 안전합니다. - 루프 조건 **
i < s.length()**이 **i**이 범위 내에 있도록 유지합니다. - Off-by-one 경계 오류는 가장 흔한 String-루프 버그입니다.
String 인덱스를 i < s.length()로 루프하고, i <= s.length()으로 하지 마십시오. 마지막 유효한 인덱스는 **length() - 1**입니다; 인덱스 length()에 접근하면 StringIndexOutOfBoundsException이 발생합니다. 그리고 변환된 텍스트를 만들려면 새로운 String을 축적하십시오(result += ch). String은 불변이므로 위치에서 편집할 수 없습니다.
s에서의 모음 세기:
int count = 0;for (int i = 0; i < s.length(); i++) { String ch = s.substring(i, i+1); if ("aeiou".indexOf(ch) >= 0) count++; }- 각 문자를 방문하고, **
"aeiou"**에 포함되면 세고.
String을 처리하려면 인덱스 루프를 **0**부터 **length()-1**까지(조건 i < s.length()), 각 문자를 **s.substring(i, i+1)**으로 읽으십시오. **if**으로 세거나, **+**로 축적하여 새로운 String 만들기 (String은 불변). 범위를 유지하여 StringIndexOutOfBoundsException을 피하십시오.
HELLO의 문자를 순회하기
루프는 인덱스 0부터 length()-1까지 방문합니다.
String s의 모든 문자를 방문하기 위한 올바른 루프 조건은...
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
유효한 인덱스는 0..length()-1이므로, i < s.length()이어야 합니다.
String의 s.length() 인덱스에 접근하면 ...이 발생함.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
마지막 유효한 인스는 length()-1입니다.
문자열을 뒤집는 String을 만들려면, Strings가 불변성이므로 ...해야 합니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
Strings는 불변성이므로, 새로운 것을 만들어야 합니다.
루프가 "HELLO" String을 위해 몇 개의 문자를 방문하는가 (i < length() 사용)?
난이도 2/5 · 140 코인 + 오늘 첫 완료 시 소액 보너스
인덱스 0..4 → 5개의 문자.
루프에서의 accumulator 패턴은 또한 String의 문자 세기도 적용됩니다.
난이도 1/5 · 100 코인 + 오늘 첫 완료 시 소액 보너스
인덱스 루프 내부의 count++는 일치하는 문자를 세고 있습니다.