在Java中将数字从字符串转换为int时的随机负数

在Java中将数字从字符串转换为int时的随机负数,java,type-conversion,Java,Type Conversion,正在尝试使用此代码将数字字符串转换为二进制 public static int convert(String text) { int num =0; for(int i =0; i<text.length();i++) { if(((int)text.charAt(i)>=48)&&((int)text.charAt(i)<=59)) { Sy

正在尝试使用此代码将数字字符串转换为二进制

public static int convert(String text)
{
    int num =0;
        for(int i =0; i<text.length();i++)
        {
            if(((int)text.charAt(i)>=48)&&((int)text.charAt(i)<=59))
            {
                System.out.println("Before: i = " + i + " num = "+ num+" char = "+ text.charAt(i) + "numchar = " + ((int)text.charAt(i)-48));
                num = num*10 + ((int)text.charAt(i)-48);
                System.out.println("After: i = " + i + " num = "+ num+" char = "+ text.charAt(i) + "numchar = " + ((int)text.charAt(i)-48));
            }

        }
        return num;
    }
}
公共静态int转换(字符串文本)
{
int num=0;

对于(int i=0;i=48)和((int)text.charAt(i)而言,Java中的
int
数据类型是一个32位有符号整数,因此它可以表示的最大值是2^31-1=2147483647。由于您试图解析大于此值的数字,因此您的算术将导致错误


要解决此问题,您需要使用能够表示较大整数的数据类型,例如
long
(最多19位)或(任意大).

您能分享一个导致错误的输入示例吗?也许您的字符串表示不适合int?作为一个离题的评论,我建议使用字符文本
'0'
'9'
来代替它们的ASCII值。Java很乐意使用这些值进行加法和减法运算,因为它们实际上就是nu成员。换句话说,
'0'==48
,在进行计算(而不是串联)时,无需将
char
强制转换为
int
,因此您可以编写
…(text.charAt(i)-'0')
(与
'9'
相同)