10. [Java] 숫자 찾기 - String.indexOf(), String.valueOf()
https://school.programmers.co.kr/learn/courses/30/lessons/120904
틀린 코드
class Solution {
public int solution(int num, int k) {
String numToString = Integer.toString(num);
char[] arr = numToString.toCharArray();
char kToChar = (char) k;
int idx = -1;
for(int i = 0; i < arr.length; i++ ) {
if (arr[i] == kToChar) {
return i+1;
}
}
return idx;
}
}
✅ char kToChar = (char) (k + '0');
- 틀린 부분: char kToChar = (char) k;
- int 타입을 char 타입으로 변환하는 방법이 잘못됨
- → int 3을 (char)로 바꾸면 '3'이 아니라 아스키 문자 'ETX' 같은 이상한 문자가 됨
- → char kToChar = (char)(k + '0'); 또는 Character.forDigit(k, 10); 로 고쳐야 함
개선한 코드
class Solution {
public int solution(int num, int k) {
String numToString = Integer.toString(num);
char[] arr = numToString.toCharArray();
char kToChar = (char) (k + '0');
int idx = -1;
for(int i = 0; i < arr.length; i++ ) {
if (arr[i] == kToChar) {
return i+1;
}
}
return idx;
}
}
더 간단한 방법 (String API 활용)
public int solution(int num, int k) {
String s = String.valueOf(num);
int idx = s.indexOf(String.valueOf(k));
return idx == -1 ? -1 : idx + 1;
}
✅ String.indexOf()
문자열 내에서 특정 문자나 문자열이 처음 등장하는 위치의 인덱스를 알려주는 매우 유용한 메서드이다.
📌 기본 사용법
String s = "29183";
int idx = s.indexOf("1"); // 결과: 2
- 문자열 "1"이 "29183"에서 0-based index 2에 처음 등장
- 못 찾으면 -1을 반환
📌 자바 공식 문법
int indexOf(int ch) // 문자 또는 문자 코드 (ex: 'a', 97)
int indexOf(String str) // 문자열
✅ 삼항연산자
자바의 삼항 연산자(ternary operator)는 if-else를 한 줄로 간단하게 쓸 수 있게 해주는 조건 연산자이다.
📌 기본 사용법
조건식 ? 참일 때 값 : 거짓일 때 값;
- 조건식이 true이면 ? 다음의 값을 반환
- false이면 : 다음의 값을 반환
📌 예제
int age = 20;
String result = (age >= 18) ? "성인" : "미성년자";
System.out.println(result); // 출력: 성인