我有一个字符串,我需要递增1该字符串同时具有字符和数字值。用字母和数字递增字符串
字符串布局,我有如下“MD00494”
我怎么会增加此为“MD00496” &“MD00497” ECT
如果这是一个正常的字符串,数字,我将它解析到一个int。
我曾尝试以下
int i = int.Parse(sdesptchNo);
i++;
txtDispatchNo.Text = i.ToString();
任何人任何想法如何,我会去了解这一点。
我有一个字符串,我需要递增1该字符串同时具有字符和数字值。用字母和数字递增字符串
字符串布局,我有如下“MD00494”
我怎么会增加此为“MD00496” &“MD00497” ECT
如果这是一个正常的字符串,数字,我将它解析到一个int。
我曾尝试以下
int i = int.Parse(sdesptchNo);
i++;
txtDispatchNo.Text = i.ToString();
任何人任何想法如何,我会去了解这一点。
你首先应该弄清字符串之间的任何共性。如果在末尾总是有一个字母前缀后跟数字(具有固定宽度),那么您可以删除这些字母,解析其余字符,然后再将它们粘在一起。
E.g.你的情况,你可以使用像下面这样:
var prefix = Regex.Match(sdesptchNo, "^\\D+").Value;
var number = Regex.Replace(sdesptchNo, "^\\D+", "");
var i = int.Parse(number) + 1;
var newString = prefix + i.ToString(new string('0', number.Length));
,可能是有点更强大的另一种选择可能是
var newString = Regex.Replace(x, "\\d+",
m => (int.Parse(m.Value) + 1).ToString(new string('0', m.Value.Length)));
这将通过在递增编号替换字符串中任意数量相同的宽度 - 但会使每个非数字完全相同并在相同的位置。
您需要找到字符串中第一个数字的位置。 然后将字符串分成2个字段。
MD 0 0 4 9 4
第一场将非数字部分 “MD” 第二字段将是数字部分 “00494”
增量数字只有部分“00495”
你会失去前导零的,所以你需要垫你的新号码与相同数量的零的,一旦你已经增加。
然后加入2个字段。
我会查找字符串中最后一个非数字的位置,而不是第一个数字,以防像“Foo37Baz00123”这样的字符串。 – 2016-04-25 14:36:37
假设您只需要增加字符串的数字部分,并且字符串的结构始终是 - 一串非数字字符后跟一串数字,则可以使用正则表达式分解将字符串转换为这两个组件,将数字部分转换为整数,然后递增并连接回来。
var match = Regex.Match("MD123", @"^([^0-9]+)([0-9]+)$");
var num = int.Parse(match.Groups[2].Value);
var after = match.Groups[1].Value + (num + 1);
您可以使用正则表达式:
int kod = int.Parse(Regex.Replace(sdesptchNo, "[^0-9]", "")) + 1;
string zeroStr=Regex.Replace(sdesptchNo, "[^0-9]", "");
string newZeroStr="";
for (int x=0;x<zeroStr.length;x++)
if (zeroStr[x]=='0') newZeroStr=newZeroStr+"0";
else break;
string newVal=Regex.Replace(sdesptchNo, "[0-9]", "") + newZeroStr + kod;
更新:这将节省您的零
这将失去前导零。 – juharr 2013-03-07 10:44:40
这是一个非正则表达式的方法:P
string str = "MD00494";
string digits = new string(str.Where(char.IsDigit).ToArray());
string letters = new string(str.Where(char.IsLetter).ToArray());
int number;
if (!int.TryParse(digits, out number)) //int.Parse would do the job since only digits are selected
{
Console.WriteLine("Something weired happened");
}
string newStr = letters + (++number).ToString("D5");
输出将是:
newStr = "MD00495"
这里是我的解决方案:
string str = Console.ReadLine();
string digits = new string(str.Where(char.IsDigit).ToArray());
string letters = new string(str.Where(char.IsLetter).ToArray());
string newStr;
int number;
if (!int.TryParse(digits, out number))
{
Console.WriteLine("Something weird happened");
}
if (digits.StartsWith("0"))
{
newStr = letters + (++number).ToString("D5");
}
else
{
newStr = letters + (++number).ToString();
}
试试吧!
string sDispatchNo = "MS00914";
var pattern = @"^[a-zA-Z]+";
var strPart = Regex.Match(sDispatchNo, pattern).Value;
var noPart = Regex.Replace(sDispatchNo, pattern, "");
var no = int.Parse(noPart);
var length = noPart.Length;
length = (no + 1)/(Math.Pow(10,length)) == 1 ? length + 1 : length;
var output = strPart + (no + 1).ToString("D" + length);
这是一个非常通用的,可用于任何大数目。步骤:1.识别字符串部分 2.识别号码部分及其长度 3.增加号码 4合并字符串和数字 – kaushal 2013-03-07 11:14:43
“MD00497”中的'D'最终会变成'E'吗? – Mohayemin 2013-03-07 10:40:38
没有D将永远呆在d它不会是那个大的地方,我需要去超过3000 – Inkey 2013-03-07 10:42:09
@Inkey:没关系,你不需要超过3000.你**必须**指定将会发生什么如果你超过了99999,除非你喜欢可能表现出未知行为的代码。 – Jon 2013-03-07 11:08:56