将字符串转换为整数

可能重复:
如何将String转换为Int?

嗨,

我有以下问题将字符串转换为整数:

string str = line.Substring(0,1); //This picks an integer at offset 0 from string 'line' 

所以现在string str包含一个整数。 我正在做以下事情:

 int i = Convert.ToInt32(str); 

如果我写下以下的陈述,我应该打印一个整数吗?

 Console.WriteLine(i); 

它编译没有任何错误,但在运行时给出以下错误:

mscorlib.dll中发生了未处理的“System.FormatException”类型exception

附加信息:输入字符串格式不正确。

有什么帮助吗?

而不是使用Convert.ToInt32(string)您应该考虑使用Int32.TryParse(string, out int) 。 TryParse方法可以帮助以更安全的方式处理用户提供的输入。 导致错误的最可能原因是您返回的子字符串具有整数值的无效字符串表示forms。

 string str = line.Substring(0,1); int i = -1; if (Int32.TryParse(str, out i)) { Console.WriteLine(i); } 

出现FormatException

value不包含可选符号后跟一系列数字(0到9)。

当参数的格式不符合被调用方法的参数规范时引发的exception。

如果您不想生成这样的exception,可以使用Int32.TryParse 。

Int32.TryParse :将数字的字符串表示forms转换为其等效的32位有符号整数。 返回值表示操作是否成功。

完全有可能在那里有一些空白。 尝试运行类似于trim()的东西(我不确定你所使用的语言)将剥离空白区域。 另外,尝试打印出字符串以确保您确实拥有正确的部分。 我们都做到了:)

您的输入可能不是有效的格式。 试试这个。 如果该数字无效,则应输出错误。

请记住,字符串应包含一个可选的符号后跟一个数字。

 string line = "23"; // or whatever. string str = line.Substring(0,1); int i = 0; if (Int32.TryParse(str, out i)) { Console.WriteLine(i); } else { Console.WriteLine ("Error converting '" + line + "', '" + str + "'."); } 

您可能看到的一件事是用户输入"-1" 。 如果你substring(0,1)做了substring(0,1) ,你只会得到"-" ,这不是真正有效的。

你确定str中返回的值是一个int,如果你使用visual studio,设置一个调试点。 我有一种感觉,你的问题可能是你实际上没有返回一个整数。 尝试:

 line.Trim().Substring(0,1); 

这将删除任何空格。