在java中如何将字符串转换为int?

flmtquvp  于 2021-06-30  发布在  Java
关注(0)|答案(30)|浏览(615)

我如何转换一个 String 到一个 int 在 java ?
我的字符串只包含数字,我想返回它所代表的数字。
例如,给定字符串 "1234" 结果应该是数字 1234 .

ruarlubt

ruarlubt16#

除了前面的答案之外,我想添加几个函数。这些是使用它们时的结果:

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
}

实施:

public static int parseIntOrDefault(String value, int defaultValue) {
  int result = defaultValue;
  try {
    result = Integer.parseInt(value);
  }
  catch (Exception e) {
  }
  return result;
}

public static int parseIntOrDefault(String value, int beginIndex, int defaultValue) {
  int result = defaultValue;
  try {
    String stringValue = value.substring(beginIndex);
    result = Integer.parseInt(stringValue);
  }
  catch (Exception e) {
  }
  return result;
}

public static int parseIntOrDefault(String value, int beginIndex, int endIndex, int defaultValue) {
  int result = defaultValue;
  try {
    String stringValue = value.substring(beginIndex, endIndex);
    result = Integer.parseInt(stringValue);
  }
  catch (Exception e) {
  }
  return result;
}
ny6fqffe

ny6fqffe17#

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

pb3s4cty18#

这是一个完整的程序与所有条件的积极和消极的不使用库

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

ljsrvy3e19#

整数.解码

你也可以使用 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 您可以使用:
拆箱:

int val = Integer.decode("12");
``` `intValue()` :

Integer.decode("12").intValue();

ztyzrc3y

ztyzrc3y20#

如前所述,apache commons的 NumberUtils 我能做到。它回来了 0 如果它不能将字符串转换为int。
您还可以定义自己的默认值:

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;
1cklez4t

1cklez4t21#

你可以试试这个:
使用 Integer.parseInt(your_string); 转换 Stringint 使用 Double.parseDouble(your_string); 转换 Stringdouble ####示例

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
vxbzzdmp

vxbzzdmp22#

对于普通字符串,可以使用:

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

对于字符串生成器和字符串缓冲区,可以使用:

Integer.parseInt(myBuilderOrBuffer.toString());
0vvn1miw

0vvn1miw23#

我有点惊讶,没有人提到以字符串作为参数的整数构造函数。
所以,这里是:

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

Java8-整数(字符串)。
当然,构造函数将返回 Integer ,并且解装箱操作将值转换为 int .
注1:值得一提的是:这个构造函数调用 parseInt 方法。

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

注2:已弃用: @Deprecated(since="9") - java 文档。

brtdzjyr

brtdzjyr24#

另一种解决方案是使用apache commons的NumberRutils:

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

apache实用程序很好,因为如果字符串是无效的数字格式,那么总是返回0。因此,你省去了试抓块。
apache NumberRutils api 3.4版

nszi6y05

nszi6y0525#

我有办法,但不知道有多有效。但效果不错,我想你可以改进一下。另一方面,我用junit做了几个测试,哪一步是正确的。我附上了功能和测试:

static public Integer str2Int(String str) {
    Integer result = null;
    if (null == str || 0 == str.length()) {
        return null;
    }
    try {
        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 (Integer)0;
            }
        }
        String strNum = str.replaceAll("[^\\d]", "" );
        if (0 == strNum.length()) {
            return null;
        }
        result = Integer.parseInt(negativeMode + strNum);
    }
    return result;
}

使用junit进行测试:

@Test
public void testStr2Int() {
    assertEquals("is numeric", (Integer)(-5), Helper.str2Int("-5"));
    assertEquals("is numeric", (Integer)50, Helper.str2Int("50.00"));
    assertEquals("is numeric", (Integer)20, Helper.str2Int("$ 20.90"));
    assertEquals("is numeric", (Integer)5, Helper.str2Int(" 5.321"));
    assertEquals("is numeric", (Integer)1000, Helper.str2Int("1,000.50"));
    assertEquals("is numeric", (Integer)0, Helper.str2Int("0.50"));
    assertEquals("is numeric", (Integer)0, Helper.str2Int(".50"));
    assertEquals("is numeric", (Integer)0, Helper.str2Int("-.10"));
    assertEquals("is numeric", (Integer)Integer.MAX_VALUE, Helper.str2Int(""+Integer.MAX_VALUE));
    assertEquals("is numeric", (Integer)Integer.MIN_VALUE, Helper.str2Int(""+Integer.MIN_VALUE));
    assertEquals("Not
     is numeric", null, Helper.str2Int("czv.,xcvsa"));
    /**
     * Dynamic test
     */
    for(Integer num = 0; num < 1000; num++) {
        for(int spaces = 1; spaces < 6; spaces++) {
            String numStr = String.format("%0"+spaces+"d", num);
            Integer numNeg = num * -1;
            assertEquals(numStr + ": is numeric", num, Helper.str2Int(numStr));
            assertEquals(numNeg + ": is numeric", numNeg, Helper.str2Int("- " + numStr));
        }
    }
}
whitzsjs

whitzsjs26#

我们可以使用 parseInt(String str) 方法 Integer 用于将字符串值转换为整数值的 Package 器类。
例如:

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

这个 Integer 类还提供 valueOf(String str) 方法:

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

我们也可以使用 toInt(String strValue) 用于转换的numberutils实用程序类:

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

zphenhs427#

好吧,需要考虑的一个非常重要的点是整数解析器抛出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.
}

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

ff29svar

ff29svar28#

您可以使用以下任一选项: Integer.parseInt(s) Integer.parseInt(s, radix) Integer.parseInt(s, beginIndex, endIndex, radix) Integer.parseUnsignedInt(s) Integer.parseUnsignedInt(s, radix) Integer.parseUnsignedInt(s, beginIndex, endIndex, radix) Integer.valueOf(s)

bvpmtnay

bvpmtnay29#

手动执行:

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

x7rlezfr30#

将字符串转换为int比仅转换数字更复杂。您已经考虑了以下问题:
字符串是否只包含数字0-9?
字符串之前或之后的-/+是怎么回事?有可能吗(指会计数字)?
最大/最小无穷大是怎么回事?如果字符串是999999999999999999会发生什么?机器能把这个字符串当作int吗?

相关问题