string轉int 如何在Java中將String轉換為int?



15 Answers

例如,有兩種方法:

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

這些方法之間略有不同:

  • valueOf返回java.lang.Integer的新實例或緩存實例
  • parseInt返回原始int

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

string轉int c++

如何在Java中將String轉換為int

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

例如,給定字符串"1234" ,結果應為數字1234




手動完成:

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");

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

Apache NumberUtils API版本3.4




只要給定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 1234
System.out.println(tryParseInteger("1234").orElse(-1));
// prints -1
System.out.println(tryParseInteger("foobar").orElse(-1));

雖然這仍然在內部使用流控制的異常,但使用代碼變得非常乾淨。




我們可以使用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) Utility Class的 toInt(String strValue)進行轉換:

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



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




只是為了好玩:您可以使用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);



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

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

但請注意,這僅適用於非負數。




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




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

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



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

確保字符串中沒有非數字數據。




我有點意外,沒有人提到將String作為參數的Integer構造函數。
所以,這是:

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

Java 8 - 整數(String)

當然,構造函數將返回Integer類型,而取消裝箱操作會將value轉換為int

值得一提的是
此構造函數調用parseInt方法。

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



使用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);
    }
 }



順便提一下,請注意,如果字符串為null,則調用:

int i = Integer.parseInt(null);

拋出NumberFormatException,而不是NullPointerException。




Related