-6

在 C# 中按某个值递增字母数字 ID 的最佳方法是什么?

例如:

我们有345FAS310E575896325SA并且我们将增加 123 ,所以我们有结果:345FAS310E575896325SA123

或者我们有345FAS310E575896325SA123并增加 234 ,结果应该是345FAS310E575896325SA357

什么是让它工作的“最便宜”的方法?

4

4 回答 4

4

这是我的算法:

    static void Main(string[] args)
    {
        var id = "843342D4343DA123D";
        var intSummand = 10;
        Console.WriteLine(AddToStringId(id, intSummand));
        Console.ReadKey();
    }

    static string AddToStringId(string id, int summand)
    {                         
        // set the begin-pointer of for the number to the end of the original id
        var intPos = id.Length;
        // go back from end of id to the begin while a char is a number
        for (int i = id.Length - 1; i >= 0; i--)
        {
            var charTmp = id.Substring(i, 1).ToCharArray()[0];
            if (char.IsNumber(charTmp))
            {
                // set the position one element back
                intPos--;
            }
            else
            {
                // we found a char and so we can break up
                break;
            }
        }
        var numberString = string.Empty;
        if (intPos < id.Length)
        {
            // the for-loop has found at least one numeric char at the end
            numberString = id.Substring(intPos, id.Length - intPos);
        }
        if (numberString.Length == 0)
        {
            // no number was found at the and so we simply add the summand as string
            id += summand.ToString();
        }
        else
        {
            // cut off the id-string up to the last char before the number at the end
            id = id.Substring(0, id.Length - numberString.Length);
            // add the Increment-operation-result to the end of the id-string and replace
            // the value which stood there before
            id += (int.Parse(numberString) + summand).ToString();
        }
        // return the result
        return id;
    }
于 2011-10-31T14:21:11.940 回答
1

每个人都在这里遇到的问题是您的字母数字值并不真正意味着任何东西。

当您给出示例时,您只是在末尾添加数字并增加这些数字,您并没有真正向我们提供有关字母代表什么的任何信息。

为了能够像这样增加一个值,我们需要知道字母的值是什么,一个很好的例子是 HEX, 0 - 9 A - F 所以如果你说将 HEX 值 09 增加 1 你会得到0A 和 0F 加 1 得到 10

我知道这不是一个答案,但是在您向我们提供一些有关您打算通过此实现的目标的真实信息之前,我们无法真正给出答案。还可以告诉我们您将其用于什么/为什么使用 AlphaNumeric 等?

于 2011-10-31T14:32:54.490 回答
1

通过查看您的示例,我将其解释为:

如果没有后缀 id,则应附加一个。否则,ID 应该递增。

private static void Main(string[] args)
{
    var id = IncrementId("345FAS310E575896325SA", 123); // AS310E575896325SA123
    var id2 = IncrementId(id, 234); //345FAS310E575896325SA357
}

public static string IncrementId(string value, int id)
{
    // you might want to use fixed length or something else
    int suffixPos = value.IndexOf("SA");

    // no id has been appended
    if (value.Length == suffixPos + 2)
        return value + id;

    // increment the existing id.
    var currentId = int.Parse(value.Substring(suffixPos + 2));
    currentId += id;
    return value.Substring(0, suffixPos + 2) + currentId;
}
于 2011-10-31T14:45:07.843 回答
0

子字符串方法?你在哪里传递你想要增加的数字,它会得到增加值的子字符串并将它们加在一起?

当增量超过 99 时会发生什么?

它只是将 100 附加到字母数字 ID 的末尾吗?

其余的字母数字 ID 也会保持不变吗?IE:

843342D4343DA123D 10

843342D4343DA123D 20

于 2011-10-31T14:10:12.453 回答