在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'
相同)