在C#中将字母数字ID增加一定值的最佳方法是什么?
例如:
我们 345FAS310E575896325SA ,我们将增加123,因此我们得到结果: 345FAS310E575896325SA123
或者我们 345FAS310E575896325SA123 并增加234,结果应为 345FAS310E575896325SA357
什么是“最便宜”的方式让它发挥作用?
答案 0 :(得分: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;
}
答案 1 :(得分:1)
每个人在这里遇到的问题是你的字母数字值并不意味着什么。
当你给出你的例子时,你只是在最后添加数字并递增数字,你还没有给我们任何关于字母代表什么的信息。
为了能够增加这样的值,我们需要知道字母的值是什么,一个很好的例子是HEX,0 - 9 A - F所以如果你说要将HEX值增加1乘以1你会得到0A并且将0F递增1得到10
我知道这不是一个答案,但是在你给我们一些关于你想要实现的目标的真实信息之前,我们无法给出答案。也许可以告诉我们你使用这个/为什么使用AlphaNumeric等?
答案 2 :(得分:1)
通过查看您的示例,我将其解释为:
如果没有后缀,则应追加一个。否则,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;
}
答案 3 :(得分:0)
一个子串方法?在传递要增加的数字的位置,它将获得递增值的子字符串并将它们一起添加?
当增量超过99时会发生什么?
是否只将100附加到字母数字ID的末尾?
其余的alphanumberic ID也会保持不变吗?即:
843342D4343DA123D 10
843342D4343DA123D 20