从 String 中的 char 解析 int 时出错

error while parsing an int from a char in String

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

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

错误信息:

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)

您正在调用的方法 parseInt(String, int) 需要一个 radix;表示您想要工作的"number system"的东西,例如

parseInt("10", 10) 

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

Integer.parseInt(i)

Integer.parseInt(i, 10)

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

Integer.parseInt("123", '1') 

这归结为一个电话

Integer.parseInt("123", 49) // '1' --> int --> 49! 

我们开始了 - 因为它与您的错误消息很好地对齐;因为 49 不是解析数字的有效 radix

但是真正的回答在这里:不要盲目地使用一些库方法。研究它的文档,以便您 了解 它在做什么;以及你传递给它的参数实际上是什么 mean

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

需要将 String.valueOf(s.charAt(0)) 转换为 String.valueOf(s.charAt (0)) 即字符到字符串。

import java.util.*;

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

            String s = Integer.toString(i);
            int Test = Integer.parseInt(String.valueOf(s.charAt(0)));   
        }
    }

利用我们这里的资源。

将字符串中的一位数字解析为整数。使用 getNumericValue(char) 在您的情况下,要将第一个字符转换为数字:

int n = Character.getNumericValue(s.charAt(0));

请注意,如果整数可以为负数,则应取绝对值。

Integer.parseInt(parameter) 期望参数是一个字符串。 你可以试试Integer.parseInt(s.charAt(0) + "")+"" 是将字符附加到一个空字符串,从而 将字符 转换为字符串,这正是该方法所期望的。

另一种将字符解析为整数的方法(在我看来更好!)是使用 Character.getNumericValue(s.charAt(0));

检查此 post 以获取有关 converting char to int

的更多详细信息