[java] Java에서 문자열을 int로 변환하는 방법

Java에서 String를 로 변환하려면 어떻게 int해야합니까?

내 문자열에는 숫자 만 포함되어 있으며 숫자를 나타내는 숫자를 반환하고 싶습니다.

예를 들어, 문자열 "1234"이 주어지면 결과는 숫자 여야합니다 1234.



답변

String myString = "1234";
int foo = Integer.parseInt(myString);

Java 문서 를 보면 “캐치”는이 함수 NumberFormatException가를 처리 할 수 ​​있다는 것을 알 수 있습니다.

int foo;
try {
   foo = Integer.parseInt(myString);
}
catch (NumberFormatException e)
{
   foo = 0;
}

(이 처리의 기본값은 잘못된 형식입니다. 0 로 설정하지만 원하는 경우 다른 작업을 수행 할 수 있습니다.)

또는 IntsJava 8과 결합하여 Guava 라이브러리 의 메소드를 사용하여 Optional문자열을 int로 변환하는 강력하고 간결한 방법을 만들 수 있습니다.

import com.google.common.primitives.Ints;

int foo = Optional.ofNullable(myString)
 .map(Ints::tryParse)
 .orElse(0)


답변

예를 들어, 다음 두 가지 방법이 있습니다.

Integer x = Integer.valueOf(str);
// or
int y = Integer.parseInt(str);

이 방법들에는 약간의 차이가 있습니다.

  • valueOf 캐시 된 새 인스턴스를 반환합니다. java.lang.Integer
  • parseIntprimitive를 리턴합니다 int.

Short.valueOf/ parseShort, Long.valueOf/ parseLong등 모든 경우에 동일합니다 .


답변

고려해야 할 매우 중요한 점은 Integer 파서가 Javadoc에 명시된대로 NumberFormatException을 던진다는 것입니다 .

int foo;
String StringThatCouldBeANumberOrNot = "26263Hello"; //will throw exception
String StringThatCouldBeANumberOrNot2 = "26263"; //will not throw exception
try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot);
} catch (NumberFormatException e) {
      //Will Throw exception!
      //do something! anything to handle the exception.
}

try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot2);
} catch (NumberFormatException e) {
      //No problem this time, but still it is good practice to care about exceptions.
      //Never trust user input :)
      //Do something! Anything to handle the exception.
}

분할 인수에서 정수 값을 가져 오거나 동적으로 구문 분석 할 때이 예외를 처리하는 것이 중요합니다.


답변

수동으로 수행하십시오.

public static int strToInt( String str ){
    int i = 0;
    int num = 0;
    boolean isNeg = false;

    //Check for negative sign; if it's there, set the isNeg flag
    if (str.charAt(0) == '-') {
        isNeg = true;
        i = 1;
    }

    //Process each character of the string;
    while( i < str.length()) {
        num *= 10;
        num += str.charAt(i++) - '0'; //Minus the ASCII code of '0' to get the value of the charAt(i++).
    }

    if (isNeg)
        num = -num;
    return num;
}


답변

다른 해결책은 Apache Commons의 NumberUtils 를 사용하는 것입니다 .

int num = NumberUtils.toInt("1234");

문자열이 유효하지 않은 숫자 형식이면 항상 0이 반환되므로 Apache 유틸리티가 유용합니다. 따라서 try catch 블록을 절약하십시오.

Apache NumberUtils API 버전 3.4


답변

현재 나는 대학에 배정을하고 있는데, 위의 식과 같은 특정 표현을 사용할 수 없으며 ASCII 테이블을 보면 그것을 할 수있었습니다. 훨씬 복잡한 코드이지만, 나처럼 제한된 다른 사람들을 도울 수 있습니다.

가장 먼저 할 일은 입력을받는 것입니다.이 경우에는 숫자 문자열입니다. 내가 전화 할게String number .이 경우에는 숫자 12를 사용하여 예시하겠습니다.String number = "12";

또 다른 제한 사항은 반복 사이클을 사용할 수 없으므로 for사이클 (완벽했을 것)도 사용할 수 없다는 사실입니다. 이것은 우리를 조금 제한하지만 다시 한 번 목표입니다. 두 자릿수 (마지막 두 자릿수 만 필요)가 필요했기 때문에 간단하게 charAt해결했습니다.

 // Obtaining the integer values of the char 1 and 2 in ASCII
 int semilastdigitASCII = number.charAt(number.length()-2);
 int lastdigitASCII = number.charAt(number.length()-1);

코드가 있으면 테이블을 살펴보고 필요한 조정을 수행하면됩니다.

 double semilastdigit = semilastdigitASCII - 48;  //A quick look, and -48 is the key
 double lastdigit = lastdigitASCII - 48;

자, 왜 두 배입니까? 글쎄, 정말 “이상한”단계 때문입니다. 현재 우리는 1과 2의 두 가지 복식을 가지고 있지만 12로 바꿔야합니다. 수학적 연산이 없습니다.

우리는 후자 (마지막 숫자)를 다음과 같이 패션 2/10 = 0.2(따라서 두 배) 으로 10으로 나눕니다 .

 lastdigit = lastdigit/10;

이것은 단지 숫자를 가지고 노는 것입니다. 우리는 마지막 숫자를 10 진수로 바 꾸었습니다. 그러나 이제 어떤 일이 발생하는지 살펴보십시오.

 double jointdigits = semilastdigit + lastdigit; // 1.0 + 0.2 = 1.2

수학에 들어 가지 않고 단순히 숫자의 숫자를 단위로 분리합니다. 우리는 0-9 만 고려하기 때문에 10의 배수로 나누는 것은 저장하는 “상자”를 만드는 것과 같습니다 (1 학년 교사가 당신에게 한 단위와 백이 무엇인지 설명했을 때를 다시 생각해보십시오). 그래서:

 int finalnumber = (int) (jointdigits*10); // Be sure to use parentheses "()"

그리고 당신은 간다. 다음 제한 사항을 고려하여 문자열 자릿수 (이 경우 두 자릿수)를이 두 자릿수로 구성된 정수로 바꿨습니다.

  • 반복적 인 사이클 없음
  • parseInt와 같은 “Magic”표현식이 없습니다.

답변

Integer.decode

당신은 또한 사용할 수 있습니다 public static Integer decode(String nm) throws NumberFormatException .

기본 8과 16에도 작동합니다.

// base 10
Integer.parseInt("12");     // 12 - int
Integer.valueOf("12");      // 12 - Integer
Integer.decode("12");       // 12 - Integer
// base 8
// 10 (0,1,...,7,10,11,12)
Integer.parseInt("12", 8);  // 10 - int
Integer.valueOf("12", 8);   // 10 - Integer
Integer.decode("012");      // 10 - Integer
// base 16
// 18 (0,1,...,F,10,11,12)
Integer.parseInt("12",16);  // 18 - int
Integer.valueOf("12",16);   // 18 - Integer
Integer.decode("#12");      // 18 - Integer
Integer.decode("0x12");     // 18 - Integer
Integer.decode("0X12");     // 18 - Integer
// base 2
Integer.parseInt("11",2);   // 3 - int
Integer.valueOf("11",2);    // 3 - Integer

당신이 얻고 싶은 경우에 int대신 Integer사용할 수 :

  1. 언 박싱 :

    int val = Integer.decode("12"); 
  2. intValue():

    Integer.decode("12").intValue();