문자열을 한 글자씩 꺼내서, 변환한 값을 바로 출력하거나 다시 저장
for (int i = 0; i < a.length(); i++) {
char ch = a.charAt(i);
if (Character.isUpperCase(ch)) {
ch = Character.toLowerCase(ch);
} else {
ch = Character.toUpperCase(ch);
}
System.out.print(ch);
}
20으로 고정함for (int i = 0; i < 20; i++)
문자열 길이는 매번 다르니까 실제 길이를 써야 했었다.
for (int i = 0; i < a.length(); i++)
charAt(i)는 인덱스가 문자열 길이를 넘어가면 에러가 난다.
문제는:
대문자 -> 소문자
소문자 -> 대문자
그래서:
if (Character.isUpperCase(ch)) {
ch = Character.toLowerCase(ch);
} else {
ch = Character.toUpperCase(ch);
}
Character.toLowerCase(ch)가 원본을 바꾸는 줄 알았음이 코드는 ch를 직접 바꾸지 않는다.
Character.toLowerCase(ch);
변환된 값을 반환만 한다. 그래서 이렇게 써야 한다.
ch = Character.toLowerCase(ch);
또는 바로 출력:
System.out.print(Character.toLowerCase(ch));
a를 출력함System.out.println(a);
이러면 변환 결과가 아니라 원래 입력 문자열이 출력된다.
String a 자체는 바뀌지 않았기 때문
a.length() = 문자열 길이
a.charAt(i) = i번째 문자 꺼내기
Character.isUpperCase(ch) = 대문자인지 확인
Character.toLowerCase(ch) = 소문자로 바꾼 값을 반환
Character.toUpperCase(ch) = 대문자로 바꾼 값을 반환
변환 함수는 원본을 바꾸지 않는다.
변환된 결과를 변수에 저장하거나 바로 출력해야 한다.