从 String 中的 char 解析 int 时出错

Ann*_*nna 2 java parsing charat

import java.util.*;

public class test 
{
    public static void main(String[] args)
    {
        int i = 123;

        String s = Integer.toString(i);

        int Test = Integer.parseInt(s, s.charAt(0));    // ERROR!
    }
}
Run Code Online (Sandbox Code Playgroud)

我想根据字符位置解析输入字符串以获取位置整数。

错误信息:

Exception in thread "main" java.lang.NumberFormatException: radix 49 greater than Character.MAX_RADIX
    at java.lang.Integer.parseInt(Unknown Source)
    at test.main(test.java:11)
Run Code Online (Sandbox Code Playgroud)

Gho*_*ica 5

您调用的方法parseInt(String, int)需要一个基数;表示您想要使用的“数字系统”的东西,例如

parseInt("10", 10) 
Run Code Online (Sandbox Code Playgroud)

(十进制为 10)!相反,使用

Integer.parseInt(i)
Run Code Online (Sandbox Code Playgroud)

或者

Integer.parseInt(i, 10)
Run Code Online (Sandbox Code Playgroud)

假设您想在十进制系统中工作。为了解释您的错误消息 - 让我们看看您的代码实际上在做什么。本质上,它调用:

Integer.parseInt("123", '1') 
Run Code Online (Sandbox Code Playgroud)

这归结为一个电话

Integer.parseInt("123", 49) // '1' --> int --> 49! 
Run Code Online (Sandbox Code Playgroud)

我们就这样 - 因为它与您的错误消息很好地吻合;因为 49 不是解析数字的有效基数。

真正的答案是:不要盲目地使用某些库方法。研究它的文档,以便了解它在做什么;以及您传递给它的参数的实际含义

因此,请转到这里并阅读parseInt(String, int)的内容!