etc./StackOverFlow

Java에서 String을 int로 어떻게 변환합니까?

청렴결백한 만능 재주꾼 2021. 10. 26. 04:48
반응형

질문자 :Unknown user


Java에서 Stringint 로 어떻게 변환합니까?

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

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



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

Java 문서 를 보면 "catch"가 이 함수가 NumberFormatException 던질 수 있다는 사실을 알 수 있습니다. 물론 다음과 같이 처리해야 합니다.

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

(이 처리는 기본적으로 잘못된 숫자를 0 으로 설정하지만 원하는 경우 다른 작업을 수행할 수 있습니다.)

Ints 메소드를 사용할 수 있습니다. 이 메소드는 Java 8의 Optional 과 함께 문자열을 int로 변환하는 강력하고 간결한 방법을 만듭니다.

 import com.google.common.primitives.Ints; int foo = Optional.ofNullable(myString) .map(Ints::tryParse) .orElse(0)

Rob Hruska

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

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

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

  • valueOf java.lang.Integer 의 새 인스턴스 또는 캐시된 인스턴스를 반환합니다.
  • parseInt 는 기본 int 반환합니다.

같은 모든 경우를위한 것입니다 Short.valueOf / parseShort , Long.valueOf / parseLong


lukastymo

음, 고려해야 할 매우 중요한 점은 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. }

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


Ali Akdurak

수동으로 수행:

 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; }

Billz

다른 솔루션은 Apache Commons의 NumberUtils를 사용하는 것입니다.

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

Apache 유틸리티는 문자열이 잘못된 숫자 형식이면 항상 0이 반환되기 때문에 유용합니다. 따라서 try catch 블록을 저장합니다.

Apache NumberUtils API 버전 3.4


Ryboflavin

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

Integer 대신 int 를 얻으려면 다음을 사용할 수 있습니다.

  1. 언박싱:

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

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

Elrond_EGLDer

현재 저는 위와 같은 특정 표현을 사용할 수 없는 대학에서 과제를 하고 있는데 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라는 두 개의 double을 가지고 있지만 12로 바꿔야 합니다. 우리가 할 수 있는 어떤 수학 연산도 없습니다.

후자(마지막 숫자)를 다음과 같이 2/10 = 0.2 (따라서 두 배가 되는 이유) 방식으로 10으로 나눕니다.

 lastdigit = lastdigit / 10;

이것은 단지 숫자를 가지고 노는 것입니다. 우리는 마지막 숫자를 소수로 바꾸고 있었습니다. 그러나 이제 무슨 일이 일어나는지 보십시오.

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

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

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

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

  • 반복 주기 없음
  • parseInt와 같은 "Magic" 표현식 없음

Oak

이를 수행하는 방법:

  1. Integer.parseInt(s)
  2. Integer.parseInt(s, radix)
  3. Integer.parseInt(s, beginIndex, endIndex, radix)
  4. Integer.parseUnsignedInt(s)
  5. Integer.parseUnsignedInt(s, radix)
  6. Integer.parseUnsignedInt(s, beginIndex, endIndex, radix)
  7. Integer.valueOf(s)
  8. Integer.valueOf(s, radix)
  9. Integer.decode(s)
  10. NumberUtils.toInt(s)
  11. NumberUtils.toInt(s, defaultValue)

Integer.valueOf는 Integer 객체를 생성하고 다른 모든 메소드는 기본 int를 생성합니다.

마지막 두 가지 방법은 commons-lang3 및 변환에 대한 큰 기사 here 입니다.


Dmytro Shvechikov

주어진 String에 Integer가 포함되어 있지 않을 가능성이 조금이라도 있을 때마다 이 특별한 경우를 처리해야 합니다. 슬프게도 표준 Java 메소드 Integer::parseIntInteger::valueOf 는 이 특별한 경우를 NumberFormatException 따라서 일반적으로 잘못된 코딩 스타일로 간주되는 흐름 제어에 대한 예외를 사용해야 합니다.

제 생각에는 이 특별한 경우는 빈 Optional<Integer> 반환하여 처리해야 합니다. Java는 이러한 방법을 제공하지 않으므로 다음 래퍼를 사용합니다.

 private Optional<Integer> tryParseInteger(String string) { try { return Optional.of(Integer.valueOf(string)); } catch (NumberFormatException e) { return Optional.empty(); } }

사용 예:

 // prints "12" System.out.println(tryParseInteger("12").map(i -> i.toString()).orElse("invalid")); // prints "-1" System.out.println(tryParseInteger("-1").map(i -> i.toString()).orElse("invalid")); // prints "invalid" System.out.println(tryParseInteger("ab").map(i -> i.toString()).orElse("invalid"));

이것은 여전히 내부적으로 흐름 제어에 대한 예외를 사용하고 있지만 사용 코드는 매우 깨끗해집니다. -1 유효한 값으로 파싱하는 경우와 유효하지 않은 String을 파싱할 수 없는 경우를 명확하게 구분할 수 있습니다.


Stefan Dollase

Integer.parseInt(yourString) 사용하십시오.

다음 사항을 기억하십시오.

Integer.parseInt("1"); // 좋아요

Integer.parseInt("-1"); // 좋아요

Integer.parseInt("+1"); // 좋아요

Integer.parseInt(" 1"); // 예외(공백)

Integer.parseInt("2147483648"); // 예외(정수는 최대값 2,147,483,647로 제한됨)

Integer.parseInt("1.1"); // 예외( . 또는 , 또는 허용되지 않는 모든 것)

Integer.parseInt(""); // 예외(0이 아님)

한 가지 유형의 예외가 있습니다. NumberFormatException


Lukas Bauer

문자열을 int로 변환하는 것은 단순히 숫자를 변환하는 것보다 더 복잡합니다. 다음 문제에 대해 생각했습니다.

  • 문자열에 숫자 0-9 만 포함됩니까?
  • 문자열 앞이나 뒤에 -/+는 어떻게 되나요? 그것이 가능합니까(회계 번호 참조)?
  • MAX_-/MIN_INFINITY는 어떻게 되나요? 문자열이 9999999999999999999이면 어떻게 됩니까? 기계가 이 문자열을 int로 처리할 수 있습니까?

Dennis Ahaus

String 값을 정수 값으로 변환하기 위해 Integer parseInt(String str) 메서드를 사용할 수 있습니다.

예를 들어:

 String strValue = "12345"; Integer intValue = Integer.parseInt(strVal);

Integer valueOf(String str) 메서드도 제공합니다.

 String strValue = "12345"; Integer intValue = Integer.valueOf(strValue);

변환을 위해 NumberUtils 유틸리티 클래스toInt(String strValue) 를 사용할 수도 있습니다.

 String strValue = "12345"; Integer intValue = NumberUtils.toInt(strValue);

Giridhar Kumar

해결책이 있는데 얼마나 효과적인지는 모르겠습니다. 하지만 잘 작동하고 있으며 개선할 수 있다고 생각합니다. 반면에 JUnit 으로 올바르게 단계를 수행하는 몇 가지 테스트를 수행했습니다. 기능과 테스트를 첨부했습니다.

 static public Integer str2Int(String str) { Integer result = null; if (null == str || 0 == str.length()) { return null; } try { result = Integer.parseInt(str); } catch (NumberFormatException e) { String negativeMode = ""; if(str.indexOf('-') != -1) negativeMode = "-"; str = str.replaceAll("-", "" ); if (str.indexOf('.') != -1) { str = str.substring(0, str.indexOf('.')); if (str.length() == 0) { return (Integer)0; } } String strNum = str.replaceAll("[^\\d]", "" ); if (0 == strNum.length()) { return null; } result = Integer.parseInt(negativeMode + strNum); } return result; }

JUnit으로 테스트:

 @Test public void testStr2Int() { assertEquals("is numeric", (Integer)(-5), Helper.str2Int("-5")); assertEquals("is numeric", (Integer)50, Helper.str2Int("50.00")); assertEquals("is numeric", (Integer)20, Helper.str2Int("$ 20.90")); assertEquals("is numeric", (Integer)5, Helper.str2Int(" 5.321")); assertEquals("is numeric", (Integer)1000, Helper.str2Int("1,000.50")); assertEquals("is numeric", (Integer)0, Helper.str2Int("0.50")); assertEquals("is numeric", (Integer)0, Helper.str2Int(".50")); assertEquals("is numeric", (Integer)0, Helper.str2Int("-.10")); assertEquals("is numeric", (Integer)Integer.MAX_VALUE, Helper.str2Int(""+Integer.MAX_VALUE)); assertEquals("is numeric", (Integer)Integer.MIN_VALUE, Helper.str2Int(""+Integer.MIN_VALUE)); assertEquals("Not is numeric", null, Helper.str2Int("czv.,xcvsa")); /** * Dynamic test */ for(Integer num = 0; num < 1000; num++) { for(int spaces = 1; spaces < 6; spaces++) { String numStr = String.format("%0"+spaces+"d", num); Integer numNeg = num * -1; assertEquals(numStr + ": is numeric", num, Helper.str2Int(numStr)); assertEquals(numNeg + ": is numeric", numNeg, Helper.str2Int("- " + numStr)); } } }

fitorec

Google Guava 에는 null 을 반환하는 tryParse(String)가 있습니다. 예를 들면 다음과 같습니다.

 Integer fooInt = Ints.tryParse(fooString); if (fooInt != null) { ... }

Vitalii Fedorenko

숫자가 아닌 모든 문자를 제거한 다음 정수를 구문 분석하여 시작할 수도 있습니다.

 String mystr = mystr.replaceAll("[^\\d]", ""); int number = Integer.parseInt(mystr);

그러나 이것은 음수가 아닌 숫자에 대해서만 작동합니다.


Thijser

이전 답변 외에도 여러 기능을 추가하고 싶습니다. 사용하는 동안의 결과는 다음과 같습니다.

 public static void main(String[] args) { System.out.println(parseIntOrDefault("123", 0)); // 123 System.out.println(parseIntOrDefault("aaa", 0)); // 0 System.out.println(parseIntOrDefault("aaa456", 3, 0)); // 456 System.out.println(parseIntOrDefault("aaa789bbb", 3, 6, 0)); // 789 }

구현:

 public static int parseIntOrDefault(String value, int defaultValue) { int result = defaultValue; try { result = Integer.parseInt(value); } catch (Exception e) { } return result; } public static int parseIntOrDefault(String value, int beginIndex, int defaultValue) { int result = defaultValue; try { String stringValue = value.substring(beginIndex); result = Integer.parseInt(stringValue); } catch (Exception e) { } return result; } public static int parseIntOrDefault(String value, int beginIndex, int endIndex, int defaultValue) { int result = defaultValue; try { String stringValue = value.substring(beginIndex, endIndex); result = Integer.parseInt(stringValue); } catch (Exception e) { } return result; }

Hoa Nguyen

언급했듯이 Apache Commons의 NumberUtils 가 이를 수행할 수 있습니다. 문자열을 int로 변환할 수 없으면 0 반환합니다.

고유한 기본값을 정의할 수도 있습니다.

 NumberUtils.toInt(String str, int defaultValue)

예시:

 NumberUtils.toInt("3244", 1) = 3244 NumberUtils.toInt("", 1) = 1 NumberUtils.toInt(null, 5) = 5 NumberUtils.toInt("Hi", 6) = 6 NumberUtils.toInt(" 32 ", 1) = 1 // Space in numbers are not allowed NumberUtils.toInt(StringUtils.trimToEmpty(" 32 ", 1)) = 32;

Alireza Fattahi

몇 가지 예방 조치를 취하면 이 코드를 사용할 수도 있습니다.

  • 옵션 #1: 예외를 명시적으로 처리합니다. 예를 들어 메시지 대화 상자를 표시한 다음 현재 워크플로의 실행을 중지합니다. 예를 들어:

     try { String stringValue = "1234"; // From String to Integer int integerValue = Integer.valueOf(stringValue); // Or int integerValue = Integer.ParseInt(stringValue); // Now from integer to back into string stringValue = String.valueOf(integerValue); } catch (NumberFormatException ex) { //JOptionPane.showMessageDialog(frame, "Invalid input string!"); System.out.println("Invalid input string!"); return; }
  • 옵션 #2: 예외가 발생한 경우 실행 흐름을 계속할 수 있는 경우 영향을 받는 변수를 재설정합니다. 예를 들어 catch 블록의 일부 수정

     catch (NumberFormatException ex) { integerValue = 0; }

상수는 null 값을 반환하지 않기 때문에 비교 또는 모든 종류의 계산에 문자열 상수를 사용하는 것은 항상 좋은 생각입니다.


manikant gautam

new Scanner("1244").nextInt() 사용할 수 있습니다. 또는 int가 있는지 묻습니다. new Scanner("1244").hasNextInt()


Christian Ullenboom

숫자가 항상 유효한 정수라고 확신하는 프로그래밍 대회에서 입력을 구문 분석하는 고유한 방법을 작성할 수 있습니다. 이것은 모든 유효성 검사 관련 코드를 건너뛰고(이 중 어느 것도 필요하지 않기 때문에) 조금 더 효율적입니다.

  1. 유효한 양의 정수의 경우:

     private static int parseInt(String str) { int i, n = 0; for (i = 0; i < str.length(); i++) { n *= 10; n += str.charAt(i) - 48; } return n; }
  2. 양수 및 음수 모두:

     private static int parseInt(String str) { int i=0, n=0, sign=1; if (str.charAt(0) == '-') { i = 1; sign = -1; } for(; i<str.length(); i++) { n* = 10; n += str.charAt(i) - 48; } return sign*n; }
  3. 이 숫자 앞이나 뒤에 공백이 예상되는 경우 추가 처리 전에 str = str.trim()


Community Wiki

간단히 다음을 시도할 수 있습니다.

  • 사용 Integer.parseInt(your_string); Stringint 로 변환하려면
  • Double.parseDouble(your_string); 사용하십시오. Stringdouble 로 변환하려면

예시

 String str = "8955"; int q = Integer.parseInt(str); System.out.println("Output>>> " + q); // Output: 8955

 String str = "89.55"; double q = Double.parseDouble(str); System.out.println("Output>>> " + q); // Output: 89.55

Community Wiki

일반 문자열의 경우 다음을 사용할 수 있습니다.

 int number = Integer.parseInt("1234");

문자열 빌더 및 문자열 버퍼의 경우 다음을 사용할 수 있습니다.

 Integer.parseInt(myBuilderOrBuffer.toString());

Aditya

아무도 String을 매개변수로 사용하는 Integer 생성자를 언급하지 않았다는 사실에 조금 놀랐습니다.

여기 있습니다:

 String myString = "1234"; int i1 = new Integer(myString);

자바 8 - 정수(문자열) .

물론 생성자는 Integer 유형을 반환하고 unboxing 작업은 값을 int 로 변환합니다.


참고 1: 언급하는 것이 중요합니다 . 이 생성자는 parseInt 메서드를 호출합니다.

 public Integer(String var1) throws NumberFormatException { this.value = parseInt(var1, 10); }

참고 2: 더 이상 사용되지 않습니다 . @Deprecated(since="9") - JavaDoc .


djm.im

Integer.parseInt()를 사용하고 이를 try...catch 블록에 넣어 숫자가 아닌 문자가 입력된 경우를 대비하여 오류를 처리합니다. 예를 들면 다음과 같습니다.

 private void ConvertToInt(){ String string = txtString.getText(); try{ int integerValue=Integer.parseInt(string); System.out.println(integerValue); } catch(Exception e){ JOptionPane.showMessageDialog( "Error converting string to integer\n" + e.toString, "Error", JOptionPane.ERROR_MESSAGE); } }

David

다음과 같은 7가지 방법으로 수행할 수 있습니다.

 import com.google.common.primitives.Ints; import org.apache.commons.lang.math.NumberUtils; String number = "999";
  1. Ints.tryParse :

    int 결과 = Ints.tryParse(숫자);

  2. NumberUtils.createInteger :

    정수 결과 = NumberUtils.createInteger(숫자);

  3. NumberUtils.toInt :

    int 결과 = NumberUtils.toInt(숫자);

  4. Integer.valueOf .값:

    정수 결과 = Integer.valueOf(숫자);

  5. Integer.parseInt :

    int 결과 = Integer.parseInt(숫자);

  6. Integer.decode .디코드:

    int 결과 = Integer.decode(숫자);

  7. Integer.parseUnsignedInt :

    int 결과 = Integer.parseUnsignedInt(숫자);


Santosh Jadi

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

문자열에 숫자가 아닌 데이터가 없는지 확인하십시오.


iKing

이것은 라이브러리를 사용하지 않고 모든 조건이 긍정적이고 부정적인 완전한 프로그램입니다.

 import java.util.Scanner; public class StringToInt { public static void main(String args[]) { String inputString; Scanner s = new Scanner(System.in); inputString = s.nextLine(); if (!inputString.matches("([+-]?([0-9]*[.])?[0-9]+)")) { System.out.println("Not a Number"); } else { Double result2 = getNumber(inputString); System.out.println("result = " + result2); } } public static Double getNumber(String number) { Double result = 0.0; Double beforeDecimal = 0.0; Double afterDecimal = 0.0; Double afterDecimalCount = 0.0; int signBit = 1; boolean flag = false; int count = number.length(); if (number.charAt(0) == '-') { signBit = -1; flag = true; } else if (number.charAt(0) == '+') { flag = true; } for (int i = 0; i < count; i++) { if (flag && i == 0) { continue; } if (afterDecimalCount == 0.0) { if (number.charAt(i) - '.' == 0) { afterDecimalCount++; } else { beforeDecimal = beforeDecimal * 10 + (number.charAt(i) - '0'); } } else { afterDecimal = afterDecimal * 10 + number.charAt(i) - ('0'); afterDecimalCount = afterDecimalCount * 10; } } if (afterDecimalCount != 0.0) { afterDecimal = afterDecimal / afterDecimalCount; result = beforeDecimal + afterDecimal; } else { result = beforeDecimal; } return result * signBit; } }

Anup Gupta

한 가지 방법은 parseInt(String)입니다. 원시 int를 반환합니다.

 String number = "10"; int result = Integer.parseInt(number); System.out.println(result);

두 번째 메서드는 valueOf(String)이며 새 Integer() 객체를 반환합니다.

 String number = "10"; Integer result = Integer.valueOf(number); System.out.println(result);

Pankaj Mandale

여기 우리가 간다

 String str = "1234"; int number = Integer.parseInt(str); print number; // 1234

Shivanandam

import java.util.*; public class strToint { public static void main(String[] args) { String str = "123"; byte barr[] = str.getBytes(); System.out.println(Arrays.toString(barr)); int result = 0; for(int i = 0; i < barr.length; i++) { //System.out.print(barr[i]+" "); int ii = barr[i]; char a = (char) ii; int no = Character.getNumericValue(a); result = result * 10 + no; System.out.println(result); } System.out.println("result:"+result); } }

Abhijeet Kale

출처 : http:www.stackoverflow.com/questions/5585779/how-do-i-convert-a-string-to-an-int-in-java

반응형