在字符串中拆分数字和非数字

本文关键字:数字 拆分 字符串 | 更新日期: 2023-09-27 18:07:45

如果我有一个像"1234-"这样的字符串值,那么我需要分割到非数字字符-,并在非数字字符之后添加数字值1。稍后我必须将值更新为"1234-1"。然后程序将检查最后更新的值1234-1,然后每次增加1并存储它以供将来使用。如果字符串中没有非数字,则程序将使用数字字符串加1。

下面是字符串和输出值

的一些示例
Ex Str1                           Output
2014-                             2014-1
2014-1                            2014-2
AAA                               AAA1
ABC-ABC                           ABC-ABC1
12345                             12346
1234AA                            1234AA1

我以前用过下面的代码

var SiteFile = (from site in db.SiteFiles where site.Code == "ACQPONUM" select site.Line2).FirstOrDefault();     // Get Input string to generate AUTO number.
int Count = (from Porders in db.Porders where Porders.No.StartsWith(SiteFile) select Porders.No).ToList().Count;       // Get the count of matching values in db.
var PONo = (from Porders in db.Porders where Porders.No.StartsWith(SiteFile) select Porders.No).ToList();             // Get list of Matching existing values.
if (Count != 0)
{
if (PONo != null)
{
int Val = (from PONos in PONo let value = Regex.Match(PONos, @"'d+").Value select Convert.ToInt32(value == string.Empty ? "0" : Regex.Match(PONos, @"'d+").Value) + 1).Concat(new[] { 0 }).Max();     // Fiind the maximum value in the matched list nd Increment value by if same type exists in the db.
porder.No = SiteFile + Val.ToString();
}
}
else
{
   porder.No = SiteFile + "1";
}

我将不胜感激。

在字符串中拆分数字和非数字

可以这样写:

   string s = "123419";
   string res = null;
   char ch = s[s.Length - 1];
   if(char.IsDigit(ch)) // handle numbers
   {
      res = s.Substring(0,s.Length - 1);   
      string suffix = null;
       // special case
      if(ch == '9'){
         suffix = "10";
      }
      else
      {
         suffix = (++ch).ToString();
      }
      res += suffix;
   }
   else 
   {
      res = string.Format("{0}1", s);
   }

试试下面的代码:

private string Incrementvalue(string str)
{
    string retVal;
    if (str.Contains(DELIMITER))
    {
        string[] parts = str.Split(new char[] { DELIMITER }, 2);
        string origSuffix = parts[1];
        string newSuffix;
        int intSuffix;
        if (int.TryParse(origSuffix, out intSuffix))
            //Delimiter exists and suffix is already a number: Increment!                
            newSuffix = (intSuffix + 1).ToString();   
        else
            //Delimiter exists and suffix is NTO number: Add a "1" suffix.    
            newSuffix = origSuffix + 1;                
            retVal = parts[0] + DELIMITER + newSuffix;
    }
    else
    {
        int temp;
        if (int.TryParse(str, out temp))
        {
            //Delimiter does not exists and the input is a number: Increment last digit! 
            string newSuffix = (int.Parse(str[str.Length - 1].ToString()) + 1).ToString();
            retVal = str.Substring(0, str.Length - 1) + newSuffix;
            retVal = str.Substring(0, str.Length - 1) + newSuffix;
        }
        else
        {
            //Delimiter does not exists and the input is NOT a number: Add a "1" suffix. 
            retVal = str + "1";
        }        
    }
    return retVal;
}

代码可以以更紧凑的方式编写,但我认为这样会更容易读,而且它会工作…