如何在Java中將字符串轉換為int?


Answers

例如,這裡有兩種方法:

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

這些方法之間略有不同:

  • valueOf返回一個新的或緩存的java.lang.Integer實例
  • parseInt返回基本int

對於所有情況也是如此: Short.valueOf / parseShortLong.valueOf / parseLong等。

Question

如何將String轉換為Java中的int

我的字符串只包含數字,我想返回它表示的數字。

例如,給定字符串"1234"的結果應該是數字1234




您也可以先刪除所有非數字字符,然後解析int:

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

但要警告的是,這只適用於非負數。




手動操作:

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



您也可以使用此代碼,並採取一些預防措施。

  • 選項#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;
    }
    

使用字符串常量進行比較或任何計算總是一個好主意,因為常量永遠不會返回空值。




使用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




另一種解決方案是使用Apache Commons的 NumberUtils:

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

Apache實用程序很好,因為如果字符串是無效的數字格式,則總是返回0。 因此保存你的try catch塊。

Apache NumberUtils API版本3.4




將字符串轉換為int比僅轉換數字更為複雜。 您已經考慮了以下問題:

  • 字符串是否只包含數字0-9
  • 字符串之前或之後的- / +有什麼用? 這是可能的(指會計數字)?
  • MAX _- / MIN_INFINITY是什麼? 如果字符串是99999999999999999999,會發生什麼情況? 機器可以把這個字符串當作int嗎?



開始了

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



對於普通字符串,你可以使用:

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

對於字符串構建器和字符串緩衝區,您可以使用:

Integer.parseInt(myBuilderOrBuffer.toString());



使用此行將字符串值解析為int:

 String x = "11111111";
 int y = Integer.parseInt(x);
 System.out.println(y);



您可以使用new Scanner("1244").nextInt() 。 或者詢問是否存在int: new Scanner("1244").hasNextInt()




我們可以使用Integer包裝類的parseInt(String str)方法將String值轉換為整數值。

例如:

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

Integer類還提供了valueOf(String str)方法:

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

我們也可以使用toInt(String strValue) 工具類的 toInt(String strValue)進行轉換:

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



只是為了好玩:您可以使用Java 8的OptionalString轉換為Integer

String str = "123";
Integer value = Optional.of(str).map(Integer::valueOf).get();
// Will return the integer value of the specified string, or it
// will throw an NPE when str is null.

value = Optional.ofNullable(str).map(Integer::valueOf).orElse(-1);
// Will do the same as the code above, except it will return -1
// when srt is null, instead of throwing an NPE.

這裡我們將Integer.valueOfOptinal結合起來。 可能有些情況下這很有用 - 例如,當你想避免空檢查時。 Pre Java 8的代碼如下所示:

Integer value = (str == null) ? -1 : Integer.parseInt(str);



這是完整的程序,所有條件都是正面的,負面的,沒有使用庫

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



你可以試試這個:

  • 使用Integer.parseInt(your_string); 將一個String轉換為int
  • 使用Double.parseDouble(your_string);String轉換為double

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