【问题标题】:Convert ReadLine() to int将 ReadLine() 转换为 int
【发布时间】:2014-10-19 21:16:07
【问题描述】:

我有一个文件,它的每一行都包含一个来自 {-1, 0, 1, 2, 3} 的值。它看起来像这样:

我想将所有这些值放在一个 int 类型的数组中,如下所示:

int[] linesValue = new int[NUMBER_OF_LINES]; 
int i; 

for (i = 0; i < NUMBER_OF_LINES; i++)
    {
        string tmpVal = reader.ReadLine(); 
        linesValue[i] = Convert.ToInt32(tmpVal);
    }

“NUMBER_OF_LINES”是私有 int,“reader”是 StreamReader。 当我运行代码时,它给了我错误:“输入字符串的格式不正确” 我试过 reader.ReadLine().ToString() 但它仍然不起作用。 如果你们能帮我解决这个问题,我将不胜感激。

【问题讨论】:

  • 可能您正在尝试转换,包括折线。
  • 我猜你在阅读最后一行时会遇到异常,因为它是空的:)
  • 感谢您的快速答复。 -Gandarez 我应该如何继续忽略断线? -Sriram 不应该只返回 null 吗?
  • @tudor07:与所有调试情况一样,您应该严格执行:通过首先确认换行符是问题。您可以通过在调试器中检查 tmpVal 并查看其内容来轻松完成此操作。
  • 1. Notepad++ 中的 Ctrl+S 以确保您想要的和当前的文件内容同步(以防万一) 2. 您确定您的文件包含正好 NUMBER_OF_LINES 个整数吗?如果不是(可能是)会发生什么?

标签: c# parsing io integer readline


【解决方案1】:

您将string 中的最后一行或换行符作为空字符串获取,并且无法转换为int,因此出现异常。只需为string.IsNullOrWhiteSpace 添加支票即可:

{
    string tmpVal = reader.ReadLine(); 
    if(!string.IsNullOrWhiteSpace(tmpVal))
    {
           linesValue[i] = Convert.ToInt32(tmpVal);
    }
}

还要确保通过此检查维护您的index,因此由于索引增加,您最终可能会在数组中得到空条目。

您也可以使用File.ReadLines 并将每一行解析为int 数组,例如:

int[] array = File.ReadLines("filePath")
    .Where(r => !string.IsNullOrWhiteSpace((r)))
    .Select(r => int.Parse((r)))
    .ToArray();

寻找使用int.TryParse 方法。如果解析失败,TryParse 方法组不会引发异常。它们返回一个bool 指示解析是否成功,解析值在out 参数中提供。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 2020-07-03
    • 2012-01-07
    • 1970-01-01
    • 2018-04-28
    • 2011-05-13
    • 1970-01-01
    相关资源
    最近更新 更多