【问题标题】:error while parsing an int from a char in String从字符串中的字符解析 int 时出错
【发布时间】:2017-09-26 11:17:00
【问题描述】:
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!
    }
}

我想根据char位置解析输入字符串,得到位置整数。

错误信息:

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)

【问题讨论】:

  • "我想从 char 位置 0 的字符串中提取 int 但失败了!"
  • 您意识到parseInt(String, int) 的第二个参数是基数,即数字的底数?以 1 为底的数字是什么?我假设您收到的“错误”有类似 radix 1 less than Character.MIN_RADIX 的消息(最小基数为 2),不是吗?

标签: java parsing charat


【解决方案1】:

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

parseInt("10", 10) 

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

Integer.parseInt(i)

Integer.parseInt(i, 10)

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

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

这归结为一个电话

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

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

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

因此,转至此处阅读parseInt(String, int) 的内容!

【讨论】:

  • '1' => 49 表示它在基数参数中转换为 char('1') 到 decimal(49)。为什么?为什么要十进制?
  • 您传递了值 '1'。但转换该 char 会导致 int 值为 49。只需 Google 查找 ASCII 表,然后查找 '1' 的数值。您将“123”中的第一个字符用作方法调用的第二个参数。因此,您的代码将 49 视为基数。现在清楚了吗?
【解决方案2】:

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

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

查看此帖子以获取有关converting char to int的更多详细信息

【讨论】:

    【解决方案3】:

    需要将String.valueOf(s.charAt(0))转为String.valueOf(s.charAt(0))即Char转String。 p>

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

    【讨论】:

      【解决方案4】:

      让我们使用这里的东西。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-14
        • 1970-01-01
        • 2016-06-29
        • 2012-10-04
        • 1970-01-01
        • 2017-07-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多