string轉int - string陣列轉int java




如何在Java中將String轉換為int? (20)

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

如何在Java中將String轉換為int

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

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


Guava有tryParse(String) ,如果無法解析字符串,則返回null ,例如:

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

一種方法是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);

你可以試試這個:

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

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

例如,有兩種方法:

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

這些方法之間略有不同:

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

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


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

只要給定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解析器會拋出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.
}

嘗試從拆分參數中獲取整數值或動態解析某些內容時,處理此異常非常重要。


如上所述,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; 

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

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

對於String builder和String buffer,您可以使用:

Integer.parseInt(myBuilderOrBuffer.toString());

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

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

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


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

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

我有點意外,沒有人提到將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);
}

手動完成:

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

目前我正在為大學做作業,在那裡我不能使用某些表達式,例如上面的表達式,通過查看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,我們可以做任何數學運算。

我們將後者(lastdigit)除以10的方式2/10 = 0.2 (因此為什麼加倍)像這樣:

 lastdigit = lastdigit/10;

這只是玩數字。 我們把最後一位數字變成了小數。 但現在,看看會發生什麼:

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

沒有太多的數學,我們只是將數字與數字隔離。 你看,因為我們只考慮0-9,除以10的倍數就像創建一個存儲它的“盒子”(當你的一年級老師解釋你是一個單位和一百個是什麼時,回想一下)。 所以:

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

你去吧 考慮到以下限制,您將一個數字字符串(在本例中為兩位數)轉換為由這兩個數字組成的整數:

  • 沒有重複的循環
  • 沒有像“parseInt”這樣的“魔術”表達式

開始了

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

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

int i = Integer.parseInt(null);

拋出NumberFormatException,而不是NullPointerException。


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

有關更多信息,請參閱Java文檔





type-conversion