如何在不使用库函数的情况下将字符串转换为数字

Bas*_*sit 4 java

假设我想创建一个方法,将数字作为字符串并返回其数字形式.喜欢

getNumber("123456");

public int getNumber(String number) {

    //No library function should used. Means i can't do Integer.parseInteger(number).

} //end of getNumber()
Run Code Online (Sandbox Code Playgroud)

我该如何实现这种方法呢

public int getNumber(String number) {

    for (int i=0; i<number.length; i++) {

    char c = number.getCharacter(i);
    ///How can i proceed further

    } //end of for()

} //end of getNumber()
Run Code Online (Sandbox Code Playgroud)

Boh*_*ian 16

在不使用库函数的情况下,'0'从每个数字字符中减去字符以给出其int值,然后在添加下一个数字的ìnt值之前将当前总和乘以10来建立数字.

Java 7

public static int getNumber(String number) {
    int result = 0;
    for (int i = 0; i < number.length(); i++) {
        result = result * 10 + number.charAt(i) - '0';
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

Java 8

public static int getNumber(String number) {
    return number.chars().reduce(0, (a, b) -> 10 * a + b - '0');
}
Run Code Online (Sandbox Code Playgroud)

这主要是因为字符0-9具有连续的ascii值,因此'0'从它们中的任何一个中减去它会给出字符的偏移量'0',这当然是字符的数字等价物.


免责声明:此代码不处理负数,算术溢出或错误输入.

您可能希望增强代码以满足这些需求.实现这样的功能将是有益的,特别是考虑到这显然是功课.


这是一些测试代码:

public static void main(String[] args) {
    System.out.println(getNumber("12345"));
}
Run Code Online (Sandbox Code Playgroud)

输出:

12345
Run Code Online (Sandbox Code Playgroud)

  • @MichaelKors想象输入"456"`.在第一次迭代之后,`result`将是'4`.下一次迭代"5"被添加,所以我们首先将'4`多次传递给'10`,因此`result`将是'4*10 + 5 = 45`.下一次迭代`6`被添加,所以我们首先将`45`乘以'10`,所以`result`将是'45*10 + 6 = 456`,这就是我们想要的. (3认同)