2016-11-24 58 views
-8

我的参考号是“DTS00001”这是在C#程序中的字符串变量
我想通过一个递增这个数字和结果应该是像“DTS00002”添加一个C#参考号码

这里是我试过的代码,

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); 

结果在新号码前没有包含所需的前导零。

+4

你尝试过这么远吗?可悲的是,我们不是您的个人代码编写服务。 – RandomStranger

+0

您可能会先分割Alpha数字和数字(使用'string.Substring()')。使用'int.TryParse()'解析数字。添加1并重新格式化 –

+3

它是作业... –

回答

0

家庭作业与否,这里有一种方法。这是沉重影响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 
+0

$“{alpha} {num.ToString()。PadLeft(match.Groups [”Numeric“]。Value.Length,'0')}”;在这个代码错误发生说;预计 – Yasitha

+0

@Yasitha - 改为旧学校'string.Format'。 _string interpolation_可能有一些.NET版本的要求。 – smoksnes

+0

谢谢@smoksnes,它的工作,非常感谢你 – Yasitha