String을 Integer로 변경하는 것이다. 이는 아래와 같은 메소드들을 알면 아주 간단히 해결할 수 있다.
Integer.parseInt()
: 원시데이터인 int 타입을 반환Integer.valueOf()
: Integer wrappee(래퍼) 객체를 반환public class StrToInt {
public int getStrToInt(String str) {
boolean Sign = true;
int result = 0;
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch == '-')
Sign = false;
else if(ch != '+')
result = result * 10 + (ch - '0');
}
return Sign?1:-1 * result;
}
}
public int 함수명() {}
: int형을 반환하는 함수boolean Sign = true;
: 부호를 기본적으로 true로 설정.length()
: 문자열의 길이 구하기.charAt(i);
: 문자열 중 i번째 인덱스 문자를 char로 변환sign?1:-1
:
char
: 기본형 변수 : 단 한 글자만 저장할 수 있는 변수
.charAt(index)
: String으로 저장된 문자열 중 index가 가리키는 문자를 char 타입으로 변환다른 피연산자의 타입에 따라 달라짐
👉🏻 유니코드 계산 : 각 문자에 부여된 유니코드 값으로 계산이 이루어짐
char
+ int
: 유니코드 반환
char
- int
: Error
int
+ char
: 유니코드 반환
int
- char
: Error
char
+ char
: 유니코드 반환
char
+ char
: 유니코드 반환
따라서 위 문제의 result = result * 10 + (ch - '0');
를 뜯어보면,
result = result * 10
: int형 = int형 10 => 일반 숫자 계산*
(ch - '0')
: char형 - char '0' => 유니코드값으로 계산
이 된 것을 확인할 수 있다.
단순한 조건문의 코드라인을 획기적으로 줄일 수 있는 연산 방식
코드라인이 의미 없이 길어질 수 있는 경우를 방지할 수 있다.
문법 : 조건문
? 참일때
: 거짓일 때
;
이해를 위해 예시를 들어보자.
int a = (5 < 4) ? 50 : 40;
이 조건문이 참일 경우 int a에 50이 담기고, 거짓일 경우 a에는 40이 담기게 된다.
💡 주의 사항
- 삼항연산자를 사용하여 코드라인을 줄였다고 해서, 컴파일 속도가 빨라지는 것은 아님
- 삼항연산자를 중복해서 처리할 경우 가독성이 떨어질 수 있음
참고자료