您好,
将字符串转换为整数时遇到以下问题:
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”类型异常
其他信息:输入字符串的格式不正确。
请帮忙吗?
答案 0 :(得分:18)
您应该考虑使用Convert.ToInt32(string)
,而不是使用Int32.TryParse(string, out int)
。 TryParse方法可以帮助以更安全的方式处理用户提供的输入。导致错误的最可能原因是您返回的子字符串具有整数值的无效字符串表示。
string str = line.Substring(0,1);
int i = -1;
if (Int32.TryParse(str, out i))
{
Console.WriteLine(i);
}
答案 1 :(得分:1)
出现FormatException
值不包含可选项 标志后跟一系列数字 (0到9)。
当抛出异常时 参数的格式不符合 参数规格 调用方法。
如果您不想生成此类异常,可以使用Int32.TryParse。
Int32.TryParse :转换字符串表示形式 一个32位有符号整数的数字 当量。返回值表示 操作是否成功。
答案 2 :(得分:0)
完全有可能在那里有一些空白。尝试运行类似于trim()的东西(我不确定你所使用的语言)将剥离空白区域。另外,尝试打印出字符串以确保您确实拥有正确的部分。我们都做到了:)
答案 3 :(得分:0)
您的输入可能不是有效格式。试试这个。如果该号码无效,则应输出错误。
请记住,字符串应包含一个可选符号后跟一个数字。
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)
,那么您只会得到"-"
,这不是真正有效的。
答案 4 :(得分:0)
你确定str中返回的值是一个int,如果你使用visual studio,设置一个调试点。我有一种感觉,你的问题可能是你实际上没有返回一个整数。试试:
line.Trim().Substring(0,1);
这将删除任何空格。