【问题标题】:Is it faster to find if a character is a letter, or parse and integer?查找字符是字母还是解析和整数是否更快?
【发布时间】:2016-11-20 07:24:40
【问题描述】:

问题 1:

我正在获取文本文件并将它们格式化为正确的格式以使用它们的数据。问题是,如果一行以数字开头,它实际上应该在其上方的第一行,并带有名称(或一组字母)。所以我想知道通过解析它并查看它是否不会失败来测试行中的第一个字符以查看它是否是一个 int 是否更快,或者执行 char.IsLetter 来查看它是否是一个字母字符?我假设在失败的解析中存在开销,甚至在尝试中被包围,并且大多数行确实以字母开头,所以我不确定速度。

问题 2:

如果 char.IsLetter 更快,那么处理出现在某些行开头的空白字符 ("") 的最简单方法是什么?我知道 int.Parse 处理它们,所以如果那是第一个字符,则很难弄清楚如何处理。

【问题讨论】:

  • 与从文件中读取文本所花费的时间相比,任何这些(TryParse 或 IsDigit 等)的开销都可能无关紧要。编写最简单且易于维护的代码。如果您遇到严重的性能问题,请分析您的代码以查找热点并尝试其他方法。
  • 真的不清楚你在问什么。没有空白字符之类的东西。请显示一些示例输入和输出。你确定你正在寻找“最快”的方式,你确定这部分代码是瓶颈吗?
  • @CodeCaster 我无法向你描述它。当我记录它时,该字符只是显示为空白..我已经在代码中测试了诸如“”之类的空格,但这并不能解决问题,并且仍然存在一个简单的空白行。当我测试没有空格的“”并记录它时,这就是日志中显示的内容。

标签: c# char int


【解决方案1】:

对我来说最好的方法是:

if(Char.IsDigit(str.TrimStart(' ').FirstOrDefault()))
{


}

try...catch的开销比上面的方法要多。

我想最好的确定方法是编写这两个方法并用 Stopwatch 包装调用以测量每个方法的时间。我认为差别不大。

【讨论】:

    猜你喜欢
    • 2011-09-01
    • 2012-12-23
    • 1970-01-01
    • 2021-10-21
    • 2013-10-09
    • 1970-01-01
    • 2011-07-07
    • 2015-03-31
    • 2013-08-05
    相关资源
    最近更新 更多