当前位置 : 首页 » 互动问答 » 正文

如何在Java中将String转换为int?

分类 : 互动问答 | 发布时间 : 2011-04-08 02:27:54 | 评论 : 30 | 浏览 : 5323127 | 喜欢 : 2607

如何转换String to an int in Java?

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

例如,给定字符串"1234",结果应该是数字1234.

回答(30)

  • 1楼
  • String myString =“1234”;
    int foo = Integer.parseInt(myString);
    

    See the Java文档了解更多信息。

  • 2楼
  • 例如,有两种方法:

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

    这些方法之间存在细微差别:

    • valueOf返回的新实例或缓存实例java.lang.Integer
    • parseInt返回原语int.

    所有情况都是如此: Short。的valueOf /parseShort, Long.valueOf/parseLong, etc.

  • 3楼
  • 好吧,需要考虑的一个非常重要的一点是Integer解析器抛出NumberFormatException,如Javadoc.

     int foo中所述;
    String StringThatCouldBeanumberOrNot =“26263Hello”; //将抛出异常
    String StringThatCouldBeanumberOrNot2 =“26263”; //不会抛出异常
    尝试{
          foo = Integer.parseInt(StringThatCouldBeanumberOrNot);
    } catch(NumberFormatException e){
          //会抛出异常!
          //做一点事!处理异常的任何事情。
    }
    
    尝试{
          foo = Integer.parseInt(StringThatCouldBeanumberOrNot2);
    } catch(NumberFormatException e){
          //这次没问题,但关注异常仍然是一种好习惯。
          //永远不要相信用户输入:)
          //做一点事!任何处理异常的事情。
    }
    

    在尝试从split参数中获取整数值或动态解析某些内容时,处理此异常非常重要。

  • 4楼
  • 手动执行:

     public static int strToInt(String str){
        int i = 0;
        int num = 0;
        boolean isNeg = false;
    
        //检查负号;如果它在那里,设置isNeg标志
        if(str.charAt(0)==' - '){
            isNeg = true;
            i = 1;
        }
    
        //处理字符串的每个字符;
        while(i <str.length()){
            num * = 10;
            num + = str.charAt(i ++) - '0'; //减去ASCII代码'0'以获取charAt(i ++)的值。
        }
    
        if(isNeg)
            num = -num;
        返回号码;
    }
  • 5楼
  • 目前我正在为大学做作业,在那里我不能使用某些表达式,例如上面的表达式,通过查看ASCII表,我设法做到了。这是一个更复杂的代码,但它可以帮助像我一样受限制的其他人。

    要做的第一件事就是接收输入,在这种情况下,是一串数字;我将其称为字符串编号,在这种情况下,我将使用数字12来举例说明,因此字符串编号=“12”;

    另一个限制是我的事实不能使用重复循环,因此,也不能使用for循环(本来是完美的)。这限制了我们一点,但话说回来,这就是目标。由于我只需要两位数(取最后两位数),一个简单的charAtsolved it:

     //在ASCII中获取char 1和2的整数值
     int semilastdigitASCII = number.charAt(number.length() -  2);
     int lastdigitASCII = number.charAt(number.length() -  1);
    

    有了代码,我们只需要查看表格,并进行必要的调整:

     double semilastdigit = semilastdigitASCII  -  48; //快速浏览,-48是关键
     double lastdigit = lastdigitASCII  -  48;
    

    现在,为什么加倍?好吧,因为一个非常“奇怪”的步骤。目前我们有两个双打,1和2,但是我们需要把它变成12,我们不能做任何数学运算。

    我们将后者(lastdigit)除以时尚<notranslate >(因此为什么加倍)像这样: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); //一定要用圆括号“()”

    你去吧。您将一个数字字符串(在本例中为两位数)转换为由这两个数字组成的整数,考虑到以下限制:

    无重复循环

    • 否“魔术”表达式,如parseInt
    • No "Magic" Expressions such as parseInt
  • 6楼
  • 另一种解决方案是使用 Apache Commons' NumberUtils:

     int num = NumberUtils.toInt(“1234”);
    

    Apache实用程序很好,因为如果字符串是无效的数字格式,则始终返回0。因此保存try catch块。

    Apache NumberUtils API Version 3.4

  • 7楼
  • Integer.decode

    你也可以使用 public static Integer decode(String nm)throws NumberFormatException .

    它也适用于base 8和16:

     // base 10
    的Integer.parseInt( “12”); // 12  -  int
    Integer.valueOf( “12”); // 12  - 整数
    Integer.decode( “12”); // 12  - 整数
    //基数8
    // 10(0,1,...,7,10,11,12)
    Integer.parseInt(“12”,8); // 10  -  int
    Integer.valueOf(“12”,8); // 10  - 整数
    Integer.decode( “012”); // 10  - 整数
    //基数16
    // 18(0,1,...,F,10,11,12)
    的Integer.parseInt( “12”,16); // 18  -  int
    Integer.valueOf( “12”,16); // 18  - 整数
    Integer.decode( “#12”); // 18  - 整数
    Integer.decode( “0×12”); // 18  - 整数
    Integer.decode( “0X12”); // 18  - 整数
    //基地2
    的Integer.parseInt( “11”,2); // 3  -  int
    Integer.valueOf( “11”,2); // 3  - 整数
    

    如果你想获得int instead of Integer,你可以使用:

    1. Unboxing:

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

       Integer.decode( “12”)的intValue();
  • 8楼
  • 只要给定String不包含Integer的可能性最小,就必须处理这种特殊情况。遗憾的是,标准的Java方法 Integer :: parseInt and Integer :: valueOf throw a NumberFormatException 表示这种特殊情况。因此,您必须使用流控制的异常,这通常被认为是错误的编码风格。

    在我看来,应该处理这种特殊情况通过返回可选<Integer> 。由于Java不提供这样的方法,我使用以下包装器:

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

    Usage:

     //打印1234
    的System.out.println(tryParseInteger( “1234”)OrElse运算(-1));
    //打印-1
    的System.out.println(tryParseInteger( “foobar的”)OrElse运算(-1));
    

    虽然这仍然在内部使用流控制的异常,但使用代码变得非常干净。

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

    • 字符串是否仅包含数字0-9?
    • 字符串之前或之后-/+的内容是什么?这是可能的(参考会计数字)?
    • MAX _- / MIN_INFINITY?的内容如果字符串是99999999999999999999会发生什么?机器可以将此字符串视为int吗?
  • 10楼
  • 我们可以使用 parseInt(String str)包装类的Integer方法将String值转换为整数值。

    例如:

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

    The Integer类还提供 valueOf(String str) method:

     String strValue =“12345”;
    Integer intValue = Integer.valueOf(strValue);
    

    我们也可以使用 toInt(String strValue) of NumberUtils Utility Class 进行转换:

     String strValue =“12345”;
    Integer intValue = NumberUtils.toInt(strValue);
  • 11楼
  • Use Integer.parseInt(yourString)

    记住以下内容:

    Integer.parseInt(“1”); // ok

    Integer.parseInt(“ - 1”); // ok

    Integer.parseInt(“+ 1”) ; // ok

    Integer.parseInt(“1”); //异常(空格)

    Integer.parseInt(“2147483648 “); //异常(整数仅限于最大值 2,147,483,647)

    Integer.parseInt(”1.1“); //异常(. or ,或不允许的任何内容)

    只有一种类型的异常: //异常(不是0或其他)<notranslate > Integer.parseInt(“”);

    NumberFormatExceptionNumberFormatException

  • 12楼
  • 我有一个解决方案,但我不知道它有多有效。但它运作良好,我认为你可以改善它。另一方面,我用JUnit做了几个测试,哪个步骤正确。我附加了函数和测试:

     static public Integer str2Int(String str){
        整数结果= null;
        if(null == str || 0 == str.length()){
            return null;
        }
        尝试{
            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(整数)0;
                }
            }
            String strNum = str.replaceAll(“[^ \\ d]”,“”);
            if(0 == strNum.length()){
                return null;
            }
            result = Integer.parseInt(negativeMode + strNum);
        }
        返回结果;
    }
    

    使用JUnit进行测试:

     @Test
    public void testStr2Int(){
        assertEquals(“是数字”,(整数)( -  5),Helper.str2Int(“ -  5”));
        assertEquals(“是数字”,(整数)50,Helper.str2Int(“50.00”));
        assertEquals(“是数字”,(整数)20,Helper.str2Int(“$ 20.90”));
        assertEquals(“是数字”,(整数)5,Helper.str2Int(“5.321”));
        assertEquals(“是数字”,(整数)1000,Helper.str2Int(“1,000.50”));
        assertEquals(“是数字”,(整数)0,Helper.str2Int(“0.50”));
        assertEquals(“是数字”,(整数)0,Helper.str2Int(“。50”));
        assertEquals(“是数字”,(整数)0,Helper.str2Int(“ - 。10”));
        assertEquals(“是数字”,(整数)Integer.MAX_VALUE,Helper.str2Int(“”+ Integer.MAX_VALUE));
        assertEquals(“是数字”,(整数)Integer.MIN_VALUE,Helper.str2Int(“”+ Integer.MIN_VALUE));
        的assertEquals(“不
         是数字“,null,Helper.str2Int(”czv。,xcvsa“));
        / **
         *动态测试
         * /
        for(整数num = 0; num <1000; num ++){
            for(int spaces = 1; spaces <6; spaces ++){
                String numStr = String.format(“%0”+ spaces +“d”,num);
                整数numNeg = num * -1;
                assertEquals(numStr +“:is numeric”,num,Helper.str2Int(numStr));
                assertEquals(numNeg +“:is numeric”,numNeg,Helper.str2Int(“ - ”+ numStr));
            }
        }
    }
  • 13楼
  • 方法:

     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对象,所有其他方法 - primitive int。

    commons-lang3的大文章的最后2个方法和关于转换here.

  • 14楼
  • 只是为了好玩:您可以使用Java 8的Optional来转换String into an Integer:

     String str =“123”;
    整数值= Optional.of(str).map(Integer :: valueOf).get();
    //将返回指定字符串的整数值,或者它
    //当str为null时将抛出NPE。
    
    value = Optional.ofNullable(str).map(Integer :: valueOf).orElse(-1);
    //将与上面的代码相同,但它将返回-1
    //当srt为null时,而不是抛出NPE。
    

    这里我们只结合 Integer.valueOf and Optinal。可能存在这种情况有用的情况 - 例如,当您想要避免空检查时。 Pre Java 8代码如下所示:

    整数值=(str == null)? -1:Integer.parseInt(str);
  • 15楼
  • Guava has tryParse(String),如果无法解析字符串,则返回null,例如:

     Integer fooInt = Ints.tryParse(fooString);
    if(fooInt!= null){
      ...
    }
  • 16楼
  • 您也可以先删除所有非数字字符,然后解析int:

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

    但请注意,这仅适用于非负数。

  • 17楼
  • 除了以上这些答案,我想添加几个函数:

     public static int parseIntOrDefault(String value,int defaultValue){
        int result = defaultValue;
        尝试{
          result = Integer.parseInt(value);
        } catch(例外e){
    
        }
        返回结果;
      }
    
      public static int parseIntOrDefault(String value,int beginIndex,int defaultValue){
        int result = defaultValue;
        尝试{
          String stringValue = value.substring(beginIndex);
          result = Integer.parseInt(stringValue);
        } catch(例外e){
    
        }
        返回结果;
      }
    
      public static int parseIntOrDefault(String value,int beginIndex,int endIndex,int defaultValue){
        int result = defaultValue;
        尝试{
          String stringValue = value.substring(beginIndex,endIndex);
          result = Integer.parseInt(stringValue);
        } catch(例外e){
    
        }
        返回结果;
      }
    

    以下是运行它们时的结果:

     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
      }
  • 18楼
  • 您可以使用 new Scanner(“1244”)。nextInt()。或者询问是否存在int: new Scanner(“1244”)。hasNextInt()

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

    • 选项#1:显式处理异常,例如,显示消息对话框,然后停止执行当前工作流。例如:

      试试
          {
              String stringValue =“1234”;
      
              //从String到Integer
              int integerValue = Integer.valueOf(stringValue);
      
              // 要么
              int integerValue = Integer.ParseInt(stringValue);
      
              //现在从整数到返回字符串
              stringValue = String.valueOf(integerValue);
          }
      catch(NumberFormatException ex){
          //JOptionPane.showMessageDialog(frame,“无效的输入字符串!”);
          System.out.println(“输入字符串无效!”);
          返回;
      }
      
    • 选项#2:如果在异常情况下执行流程可以继续,则重置受影响的变量。例如,在catch块中有一些修改

       catch(NumberFormatException ex){
          integerValue = 0;
      }
      

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

  • 20楼
  • 如前所述,Apache Commons NumberUtils 可以做到。如果它不能将字符串转换为int,则返回0

    您还可以定义自己的默认值。

     NumberUtils.toInt(String str,int defaultValue)
    

    example:

     NumberUtils.toInt(“3244”,1)= 3244
    NumberUtils.toInt(“”,1)= 1
    NumberUtils.toInt(null,5)= 5
    NumberUtils.toInt(“Hi”,6)= 6
    NumberUtils.toInt(“32”,1)= 1 //不允许使用数字空格
    NumberUtils.toInt(StringUtils.trimToEmpty(“32”,1))= 32;
  • 21楼
  • 在编程竞赛中,您可以确保数字始终是有效整数,那么您可以编写自己的方法来解析输入。这将跳过所有与验证相关的代码(因为您不需要任何相关代码)并且效率会更高。

    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;
          }
          返回
      }
      
    2. 对于正整数和负整数:

       private static int parseInt(String str){
          int i = 0,n = 0,sign = 1;
          if(str.charAt(0)==' - '){
              I = 1;
              签= -1;
          }
          for(; i <str.length(); i ++){
              N * = 10;
              N + = str.charAt(I)-48;
          }
          返回标志* n;
      }
      

       

    3. 如果您希望在这些数字之前或之后有空格, 然后确保在进一步处理之前执行 str = str.trim()

  • 22楼
  • 你可以试试这个:

    • Use Integer.parseInt(your_string); 来转换String to int
    • Use Double.parseDouble(your_string); 来转换String to double

    Example

     String str =“8955”;
    int q = Integer.parseInt(str);
    System.out.println(“输出>>>”+ q); //输出:8955
    

     String str =“89.55”;
    double q = Double.parseDouble(str);
    System.out.println(“输出>>>”+ q); //输出:89.55
  • 23楼
  • int foo = Integer.parseInt(“1234”);
    

    确保字符串中没有非数字数据。

  • 24楼
  • 对于普通字符串,您可以使用:

     int number = Integer.parseInt(“1234”);
    

    对于String builder和String buffer,您可以使用:

     Integer.parseInt(myBuilderOrBuffer.toString());
  • 25楼
  • Here we go

    String str =“1234”;
    int number = Integer.parseInt(str);
    打印编号; // 1234
  • 26楼
  • 我有点意外,没有人提到将String作为参数的Integer构造函数。
    所以,这里是:

     String myString =“1234”;
    int i1 = new Integer(myString);
    

    Java 8 - Integer(String).

    当然,构造函数将返回type Integer,并且取消装箱操作会将值转换为int.


    重要的是提到
    这个构造函数调用parseInt method.

     public Integer(String var1)throws NumberFormatException {
        this.value = parseInt(var1,10);
    }
  • 27楼
  • 一种方法是parseInt(String)返回一个原语int

     String number =“10”;
    int result = Integer.parseInt(number);
    的System.out.println(结果);
    

    第二种方法是valueOf(String)返回一个新的Integer()对象。

     String number =“10”;
    整数结果= Integer.valueOf(number);
    的System.out.println(结果);
  • 28楼
  • 使用Integer.parseInt()并将其放在 try ... catch 块中以处理任何错误,以防万一输入非数字字符,例如,

     private void ConvertToInt(){
        String string = txtString.getText();
        尝试{
            int integerValue = Integer.parseInt(string);
            的System.out.println(integerValue);
        }
        catch(例外e){
           JOptionPane.showMessageDialog(
             “将字符串转换为整数\ n”时出错\ n“+ e.toString,
             “错误”,
             JOptionPane.ERROR_MESSAGE);
        }
     }
  • 29楼
  • 这是完整的程序,所有条件都是正面的,不使用库

     import java.util.Scanner;
    
    
        public class StringToInt {
         public static void main(String args []){
          String inputString;
          扫描仪s =新扫描仪(System.in);
          inputString = s.nextLine();
    
          if(!inputString.matches(“(([+  - ]?([0-9] * [。])?[0-9] +)”)){
           System.out.println(“非数字”);
          } else {
           double result2 = getNumber(inputString);
           System.out.println(“result =”+ result2);
          }
    
         }
         public static Double getNumber(String number){
          双重结果= 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){
            继续;
    
           }
           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;
          }
    
          返回结果* signBit;
         }
        }
  • 30楼
  • 顺便提一下,请注意,如果字符串为null,则调用:

     int i = Integer.parseInt(null);
    

    抛出NumberFormatException,而不是NullPointerException。

相关阅读:

Converting a date string to a DateTime object using Joda Time library

Java reading a file into an ArrayList?

How to clear console in Java - Eclipse SDK

How to convert string to char array in C++?

How to convert string to char array in C++?

How do I replace a character at a particular index in JavaScript?

How many spaces will Java String.trim() remove?

How many spaces will Java String.trim() remove?

How to print all key and values from HashMap in Android?

With android studio no jvm found, JAVA_HOME has been set