字符串的数字检查并不总是按预期工作

时间:2013-12-04 13:33:13

标签: c# .net-4.5

我有一个问题,我自己无法解决。我正在使用CSV格式的文件中使用默认编码读取字符串值(据我所知,UTF-8)。问题是,我使用以下方法来确定字符串是否仅包含数字:

private static bool IsDigitsOnly(string str)
    {
        return str.All(Char.IsDigit);
    }

在大多数情况下,它工作正常,但当输入字符串是以下之一时返回'false':

  • 726849004
  • 704152104
  • 779450251
  • 779459121
  • 346751902
  • 779459111
  • 779459115
  • 779428100
  • 726852040

我尝试了另一种方法,将方法更改为:

str.All(c => c >= '0' && c <= '9');

在上述情况下也是如此。

当我调试时,我可以看到,字符串值是正确的(没有尾随或前导空格,字符或任何东西)

有人可以帮助我吗?

提前谢谢你, 托马斯。

2 个答案:

答案 0 :(得分:0)

替换

return str.All(char.IsDigit);

return str.All(c =>
    char.IsDigit(c));

并在第二行设置一个断点,然后调试以检查传递的字符,并希望找到一个不是数字的字符。

答案 1 :(得分:0)

我试图解决这个问题,发现除了第3和第4个字符串外,每个字符串末尾都有一些怀疑字符。看我的测试应用程序屏幕截图: enter image description here

这导致错误。如果您看到该字符的ASCII值,那么它的31,列为单位分隔符。需要看看它为什么存在。

我知道我没有回答你的问题,而是试图给出/得到一些指针来解决这个有趣的问题。