11

1 ずつインクリメントする必要がある文字列があります。文字列には、文字と数値の両方が含まれています。

私が持っている文字列レイアウトは次のとおりです「MD00494」

これを「MD00496」および「MD00497」などにインクリメントするにはどうすればよいですか

数値を含む通常の文字列の場合、それを int に解析します。

私は次のことを試しました

 int i = int.Parse(sdesptchNo);
 i++;
 txtDispatchNo.Text = i.ToString();

私がこれについてどのように行くか誰でも考えます。

4

8 に答える 8

17

最初に、文字列間の共通点を把握する必要があります。最後に数字 (固定幅) が続く文字のプレフィックスが常にある場合は、文字を削除し、残りを解析し、インクリメントして、それらを再びくっつけることができます。

たとえば、あなたの場合、次のようなものを使用できます。

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)));

これにより、文字列内の任意の数字が同じ幅のインクリメントされた数字に置き換えられますが、数字以外のすべての数字はまったく同じで同じ場所に残ります。

于 2013-03-07T10:40:02.600 に答える
7

ここに1つの非正規表現の方法があります: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"
于 2013-03-07T10:44:57.993 に答える
4

文字列の数値部分のみをインクリメントする必要があり、文字列の構造が常に-数字以外の文字の束とそれに続く数字の束であると仮定すると、正規表現を使用して文字列をこれらに分割できます2 つのコンポーネントの場合、数値部分を整数に変換し、インクリメントしてから連結し直します。

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);
于 2013-03-07T10:42:49.513 に答える
2

文字列の最初の桁の位置を見つける必要があります。次に、文字列を 2 つのフィールドに分割します。

0 1 2 3 4 5 6

MD 0 0 4 9 4

最初のフィールドは非数値部分「MD」になり、2 番目のフィールドは数値部分「00494」になります。

数値のみの部分を「00495」に増やします

先頭のゼロが失われるため、インクリメントしたら、新しい数値に同じ量のゼロを埋め込む必要があります。

次に、2 つのフィールドを結合します。

于 2013-03-07T10:41:46.563 に答える
0

正規表現を使用できます:

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;

更新:これにより、ゼロが保存されます

于 2013-03-07T10:43:01.873 に答える
0

これが私の解決策です:

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();
}

それを試してみてください!

于 2013-03-07T11:02:40.703 に答える
0
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);
于 2013-03-07T11:13:28.333 に答える