Java/모두의 자바

Chapter 10-57 String을 숫자로 바꾸기

계란💕 2022. 2. 13. 01:37

  Ex) getStrToInt메서드는 String형 str을 매개변수로 받는다. str을 숫자로 변환한 결과를 반환하도록 strToInt를 완성하라. 예를 들어 str이 '1234'이면 1234를 반환하고 '-1234'이면 -1234를 반환한다. str은 부호(+, -) 와 숫자로만 구성됐고 잘못된 값이 입력되는 경우는 없다. 

<hide/>
package javaStudy;
public class StrToInt {
	public int getStrToInt(String str) {
		int result = 0;
		int sign = 1;
		int index = 1;
		char ch = str.charAt(0);
		
		if(ch == '-'){
			sign = -1;
		}else if(ch == '+'){
			sign = 1;
		}else {
			index = 0;
		}
		for(int i = index; i < str.length(); ++i ){
			result = result * 10 + (str.charAt(i) - '0');
		}
		return sign * result;
	}
	public static void main(String[] args) {
		StrToInt strToInt = new StrToInt();
		System.out.println( strToInt.getStrToInt("-1234"));
		System.out.println( strToInt.getStrToInt("+1234"));
		System.out.println( strToInt.getStrToInt("1234"));
	}
}

  Note) 실행 결과

  (1) 자바가 젯공하는 api를 사용하지 않고 직접 푸는 방법

 

  - 리턴할 결괏값 result를 int형으로 선언한다.  

  - 부호를 가진 경우와 없는 경우로 나뉜므로 결과값을 리턴할 때 부호값을 정확히 해줘야 한다. 

  - 음수인 경우에는 결괏값은 -1을 곱하고 양수인 경우에는 + 1을 곱하면 된다. 

  - 그 값을 기억할 변수 sign을 선언한다. 

  - 다음에 문자열로 들어온 값을 정수로 바꾼다. 

  - 첫 문자가 부호 비트일 경우에는 숫자로 바꿔줄 필요가 없다.

  - index라는 변수를 선언하고 부호가 있는 경우 해당하는 1값으로 초기화한다. 

  - 그라면 나중에 문자를 숫자로 바꿀 반복문을 수행할 때 부호를 가진 값은 index를 0으로 시작해서 문제를 해결한다. 

  - 먼저, 부호 유무에 따라 if문을 이용해 sign 값을 할당한다. 

  - chatAt(0): 첫 번째 문자를 얻어내는 메서드

    -> 첫 문자가 -이면 sign = -1, +이면 sign = 1 을 넣는다. 

    -> 부호가  없으면 index = 0으로 할당한다. 

    -> 이렇게 하면 String을 int로 값 으로 바꿀 때 부호 있는 값은 두 번째 문자부터 바꿔주고

    -> 부호 없는 값은 첫 문자부터 바꿀 수 있다. 

  - 그리고 다음, String값을 int값으로 바꿔줘야 한다. 

  - result = result * 10 + (str.charAt(i) - '0') 

    -> 1 + '1'을 출력하면 50이 출력된다. (아스키코드 '1'의 십진수 : 49 )

    -> char형을 실제 저장 장소에 저장될 때 약속한 코드 값으로 저장되기 때문이다. 
    -> 따라서 얻어온 char값에 '0'을 빼줘야 원하는 값을 얻을 수 있다.

   - 첫 번째 반복문은 실행하면 '1'이라는 char값을 얻을 수 있다. 

   -  result = result * 10 

    -> 이 부분에서 처음 result값은 0이므로 이 문장을 실행하면 result에는 1이라는 정숫값이 들어간다. 

    -> 다음 반복문을 실행하면 result에는 1이 들어 있는 상태이므로  retult * 10을 해서 10이 얻어지고

    -> str.charAt(i) - '0' 을 수행하면 2를 얻어 온다. 

    -> result = result * 10 + (str.charAt(i) - '0')  : 12를 얻어 온다.

 

 

  (2) 자바가 제공하는 api를 이용해 간단히 푸는 방법 

 

public int getStrToInt(String str) {
	return Integer.parseInt(str);
}

  - Java의 Integer객체를 제공하는 parseInt()라는 메서드를 이용한다. 

  - 기본 자료형 int를 객체 타입으로 바꿔주는 클래스가 Integer 클래스이다.

  - 이 클래스는 int를 객체로 바꾸는 일뿐 아니라 문자열로 들어온 값을 기본 자료형 int로 바꿔주는 일도 한다.