如何在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




您也可以使用此代码,并采取一些预防措施。

  • 选项#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;
    }
    

使用字符串常量进行比较或任何类型的计算总是一个好主意,因为常量永远不会返回空值。




将字符串转换为int比仅转换数字更为复杂。 您已经考虑了以下问题:

  • 字符串是否只包含数字0-9
  • 字符串之前或之后的- / +有什么用? 这是可能的(指会计数字)?
  • MAX _- / MIN_INFINITY是什么? 如果字符串是99999999999999999999,会发生什么情况? 机器可以把这个字符串当作int吗?



手动操作:

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



我们可以使用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);



使用此行将字符串值解析为int:

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



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



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




开始了

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



你可以试试这个:

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



这是完整的程序,所有条件都是正面的,负面的,没有使用库

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(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 number = Integer.parseInt("1234");

对于字符串构建器和字符串缓冲区,您可以使用:

Integer.parseInt(myBuilderOrBuffer.toString());



您也可以先删除所有非数字字符,然后解析int:

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

但要警告的是,这只适用于非负数。