【问题标题】:Add one to C# reference numberC# 参考号加一
【发布时间】:2017-04-08 20:39:12
【问题描述】:

我的参考编号是“DTS00001”,它是 C# 程序中的字符串变量
我想将此数字加一,结果应类似于“DTS00002”

这是我试过的代码,

while (reader.Read())
{
    String str = reader["rfno"].ToString();
    String st = str.Substring(3, 5); 
    int number = Convert.ToInt32(st);                    
    number += 1;
    string myNewString = "DTS" + number;

    MessageBox.Show(myNewString);

结果在新数字之前不包含所需的前导零。

.

【问题讨论】:

  • 到目前为止你尝试过什么?遗憾的是,我们不是您的个人代码编写服务。
  • 您可以从拆分字母数字和数字开始(使用string.Substring())。使用int.TryParse() 解析数字。加 1 并重新格式化
  • 将值解析为其组件值,递增数字组件值,将它们重新组合成一个字符串。或者,更好的是,将组件值存储在一个简单的类中,该类允许您修改它们并从其 .ToString() 覆盖输出完整的字符串。这样你就不需要解析任何东西了。
  • String str = reader["rfno"].ToString();字符串 st = str.Substring(3, 5); int number = Convert.ToInt32(st);数字 += 1; string myNewString = "DTS" + number;

标签: c# numbers


【解决方案1】:

无论是否做作业,这是一种方法。它受到stemas answer严重影响。它使用Regex 将字母与数字分开。和PadLeft 保持正确数量的前导零。

Tim Schmelters answer 更加优雅,但这也适用于其他类型的产品编号,并且不限于特定数量的前导零或开头的特定字符集。这个解决方案的缺点是它必须是[字母][数字]。

private static string Increase(string productNo)
{
    // This is a regex to split it into to groups.
    var numAlpha = new Regex("(?<Alpha>[a-zA-Z]*[ _]?)(?<Numeric>[0-9]*)");
    // Match the input string for the regex.
    var match = numAlpha.Match(productNo);
    // Get the alphabetical part.
    var alpha = match.Groups["Alpha"].Value;
    // Get the numeric part.
    int num = int.Parse(match.Groups["Numeric"].Value);
    // Add +1
    num++;
    // Combine the alphabetical part with the increased number, but use PadLeft to maintain the padding (leading zeros).
    var newString = string.Format("{0}{1}", alpha, num.ToString().PadLeft(match.Groups["Numeric"].Value.Length, '0'));
    return newString;
}


Console.WriteLine(Increase("DTS00008"));
Console.WriteLine(Increase("DTS00010"));
Console.WriteLine(Increase("DTS00020"));
Console.WriteLine(Increase("DTS00099"));
Console.WriteLine(Increase("PRODUCT0000009"));
Console.WriteLine(Increase("PRODUCT0000001"));

输出:

DTS00009
DTS00011
DTS00021
DTS00100
PRODUCT0000010
PRODUCT0000002

【讨论】:

  • $"{alpha}{num.ToString().PadLeft(match.Groups["Numeric"].Value.Length, '0')}";在此代码中发生错误说;预期
  • @Yasitha - 改为老式的string.Format字符串插值可能有一些 .NET 版本要求。
猜你喜欢
  • 2012-07-18
  • 1970-01-01
  • 2022-01-07
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多