将字符串转换为整数 [重复]

Posted

技术标签:

【中文标题】将字符串转换为整数 [重复]【英文标题】:Convert String to Integer [duplicate] 【发布时间】:2010-11-21 04:41:11 【问题描述】:

可能重复:how can I convert String to Int ?

嗨,

在将字符串转换为整数时遇到以下问题:

string str = line.Substring(0,1);

//This picks an integer at offset 0 from string 'line' 

所以现在字符串 str 中包含一个整数。我正在执行以下操作:

int i = Convert.ToInt32(str);

如果我写下面的语句,我应该打印一个整数吗?

Console.WriteLine(i);

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

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

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

有什么帮助吗?

【问题讨论】:

用你使用的语言标记这个。 如果您可以在行变量中提供字符串值,则可能更容易检测到错误。 这是多次重复,请参阅***.com/questions/1019793/…、***.com/questions/952469/convert-string-to-int、***.com/questions/887586/convert-string-to-int。 【参考方案1】:

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

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

这将删除所有空格。

【讨论】:

Trim() 只会删除字符串末尾和开头的空格,因此不能保证根据原始字符串包含的内容来解决问题。 是的,但是由于子字符串是 (0,1),这将始终是开头,也可能是结尾。【参考方案2】:

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

请记住,字符串应该由一个可选的符号后跟一个数字组成。

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),您只会得到"-",这实际上是无效的。

【讨论】:

【参考方案3】:

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

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

   Console.WriteLine(i);

【讨论】:

感谢这段代码。我明天会试一试,因为我现在无法访问我的工作站。明天将在这里更新输出。不管它可能是什么......谢谢再次 在提供的示例中将 i 设置为 -1 的原因是什么?它向我建议,在解析失败后,您可以以某种方式测试 -1,但如果解析失败,TryParse 会将 i 设置为 0【参考方案4】:

格式异常

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

执行时抛出的异常 参数格式不符合 的参数规格 调用方法。

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

Int32.TryParse:转换字符串表示 一个数字到它的 32 位有符号整数 相等的。返回值表示 操作是否成功。

【讨论】:

【参考方案5】:

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

【讨论】:

好吧,当我使用 Console.WriteLine(str) 在控制台上输出字符串时,它会打印出一个符号(基本上是笑脸),因为我将计数设为 1,所以我认为不会有任何整数以外的其他字符(打印为笑脸)。顺便说一句,我在 Visual Studio 2005 中使用 C#。 如果控制台无法将其打印为任何整数,那么我猜它不是整数。我在这里可能是错的,但我对这种方法的理解是将整数的字符串表示形式,比如“1234”转换为 1234 的整数数据类型表示形式,例如你可以用它做数学的东西。这就是你想要做的吗?

以上是关于将字符串转换为整数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将字符串列表转换为整数列表[重复]

将字符串数组转换为整数python [重复]

如何将整数转换为字符串[重复]

将字符串元素转换为整数C++ [重复]

Java - 将整数转换为字符串[重复]

将字符串形式的二进制转换为整数[重复]