【问题标题】:C# convert substring with no value to 0 [closed]C#将没有值的子字符串转换为0 [关闭]
【发布时间】:2014-12-22 20:19:58
【问题描述】:

使用 C#,即使子字符串的值为 null,我也需要将子字符串转换为 int。

我的代码读取文本文件的行,然后将文本的某些部分分配给字符串。

int _CUSTBAL = Convert.ToInt32(line.Substring(5, 2));

示例文本:

12345 10 等
12346 20等
12347      等

我遇到的问题是,如果该行包含空格,则会引发异常。如果子字符串包含空白,我需要它返回零。例如。如果文本格式为blank9,那么我需要返回09。我尝试过使用可为空的类型,但这并不能解决问题。谢谢

【问题讨论】:

  • String.Replace(" ", "0") 应该可以删除空格并在那里放置一个零。
  • “返回09”是什么意思? Convert.ToInt32() 返回整数。你的意思是你需要字符串表示?不是整数?
  • 不清楚你说的090是什么意思,没有这个数字。整数中不能有前导零。
  • 未知数太多。在您的一个示例中,您需要 3 位数字,这与问题的其余部分相矛盾。在 int 类型中不能有前导零。弄清楚你想要什么。
  • 在提问之前搜索 Bobby,这样你就不会被否决,相信我

标签: c#


【解决方案1】:

如果TryParse() 失败,_CUSTBAL 将为 0。

int _CUSTBAL;
int.TryParse(line.Substring(5, 2), out _CUSTBAL);

Here 是一个演示您的测试用例的小提琴。

如果您确实需要前导零,例如,_CUSTBAL.ToString("000") 将变为 2 到 002 和 20 到 020。

【讨论】:

    【解决方案2】:

    这个呢:

    string sub = line.Substring(5, 2).Trim();
    int _CUSTBAL = sub != string.Empty ? Convert.ToInt32(sub) : 0;
    

    它会去掉所有的空格并为空字符串返回 0。

    否则:

    string sub = line.Substring(5, 2);
    int _CUSTBAL = !string.IsNullOrWhiteSpace(sub) ? Convert.ToInt32(sub) : 0;
    

    【讨论】:

    • 您的第二个选项是完美的。谢谢
    • @BobbyTurkalino,关于ToInt32TryParse,我要指出的一件事是,如果sub 最终不是空引用或数字,例如` E` 或其他东西,你会得到一个 FormatException -- TryParse 会给你一个 0 表示任何不是数字的东西,无论是空引用、字母等。见 this 帖子
    【解决方案3】:

    你需要自己做。

    string toConvert;
    
    if(string.IsNullOrWhiteSpace(line))
        toConvert = "0";
    else
        toConvert = line;
    
    Convert.ToInt32(toConvert);
    

    【讨论】:

    • 我觉得你需要IsNullOrWhiteSpace()
    【解决方案4】:

    为什么不检查空白值?

    var value = line.Substring(5, 2);
    var _CUSTBAL = String.IsNullOrEmpty(value)? 0 : Convert.ToInt32(value);
    

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 2020-04-08
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 2016-07-01
      • 1970-01-01
      相关资源
      最近更新 更多