1

我有一个字符串列表,其中包含带数字的字符。我只是想拆分字符串以获取数字,然后我需要从拆分后的数字列表中找到最大数字。

匹配字符串

abc

示例列表值

abc9
abc100
abc999
abc

结果

abc1000

我试过下面的代码

string Result="";
var SF = (from site in db.SF where site.Code == "xyz" select site.Line2).FirstOrDefault();   // Here I ll get "abc"
                    int Count = (from Ps in db.Ps where Ps.No.StartsWith(SF) select Ps.No).ToList().Count;
                    if (Count != 0)
                    {
                        var PNo = (from Ps in db.Ps where Ps.No.StartsWith(SF) select Ps.No).ToList().LastOrDefault();
                        if (PNo != null)
                        {
                            int Val = Convert.ToInt32(PNo.Replace(SF, "")) + 1;  // Here I need to get `abc1000` based on the above ex. list.
                            Res = SF + Val.ToString();
                        }
                    }
                    else
                    {
                        Result = SF + "1";
                    }

当我执行代码时,它到达“abc45”后总是带有“abc10”。提供通用逻辑的任何帮助将不胜感激。

谢谢

4

4 回答 4

2

试试下面的代码:

var myStrings = new List<string>();
            myStrings.Add("abc9");
            myStrings.Add("abc100");
            myStrings.Add("abc999");
            myStrings.Add("abc");

            var maxNumber = "abc" + (from myString in myStrings let value = Regex.Match(myString, @"\d+").Value select Convert.ToInt32(value == string.Empty ? "0" : Regex.Match(myString, @"\d+").Value) + 1).Concat(new[] { 0 }).Max();
于 2013-10-30T09:14:15.690 回答
0

用于OrderByDescending()获取最大的数字,然后添加+1到结果中

var result = (from Ps in db.Ps 
                where Ps.No.StartsWith(SF) 
                select Ps.No)
            .OrderByDescending(m => m.PS.No)
            .FirstOrDefault();
于 2013-10-30T09:05:24.830 回答
0

这个怎么样?我试过了,它似乎做了你所描述的。

public static string testString(string[] input, string startString)
    {
        int max = 0;
        try
        {
            max = input.Where(s => s.StartsWith(startString) && s.Length > startString.Length)
                       .Max(s => int.Parse(s.Replace(startString, string.Empty)));
        }
        catch
        {
            // no worries, this means max was "abc" without a number
        }
        return string.Format("{0}{1}", startString, (max + 1).ToString());

    }

调用它

string test = testString(new string[] { "abc1", "abc123", "abc23", "xyz23" }, "abc");
于 2013-10-30T09:14:07.503 回答
0

尝试下面提到的代码从您的列表中获取最大数量

var max = myList.Select(v => int.Parse(v.Substring(3))).Max();
于 2013-10-30T09:18:12.547 回答