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
로 설정하지만 원하는 경우 다른 작업을 수행 할 수 있습니다.)
또는 Ints
Java 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
parseInt
primitive를 리턴합니다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 블록을 절약하십시오.
답변
현재 나는 대학에 배정을하고 있는데, 위의 식과 같은 특정 표현을 사용할 수 없으며 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
사용할 수 :
-
언 박싱 :
int val = Integer.decode("12");
-
intValue()
:Integer.decode("12").intValue();