2013-03-07 27 views
6

Ich habe eine Zeichenfolge, die ich um 1 erhöhen muss Die Zeichenfolge enthält sowohl Zeichen als auch numerische Werte.Inkrementieren einer Zeichenfolge mit Buchstaben und Zahlen

Das String Layout ich habe, ist wie folgt „MD00494“

Wie würde ich diese erhöhen zu „MD00496“ & „MD00497“ ect

Wenn es eine normale Zeichenfolge mit Zahlen wir es analysieren würden ein Int.

Ich habe versucht, die folgenden

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

Wer irgendwelche Ideen, wie ich über diese gehen würde.

+0

Wird 'D' in "MD00497" eventuell 'E'? – Mohayemin

+0

Nein D wird immer bei d bleiben Es wird nicht so groß sein, wo ich über 3000 gehen muss – Inkey

+1

@Inkey: Es spielt keine Rolle, dass du nicht über 3000 hinausgehen musst. Du ** musst ** angeben, was passieren wird wenn Sie über 99999 hinausgehen, es sei denn, Sie möchten Code, der möglicherweise ein unbekanntes Verhalten aufweist. – Jon

Antwort

12

Sie sollten zuerst alle Gemeinsamkeiten zwischen den Strings herausfinden. Wenn am Ende immer ein Präfix von Buchstaben gefolgt von Ziffern (mit einer festen Breite) vorhanden ist, können Sie einfach die Buchstaben entfernen, den Rest analysieren, inkrementieren und wieder zusammenstecken.

z. in Ihrem Fall könnten Sie so etwas wie die folgenden verwenden:

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

Eine weitere Option, die etwas robuster sein könnte

var newString = Regex.Replace(x, "\\d+", 
    m => (int.Parse(m.Value) + 1).ToString(new string('0', m.Value.Length))); 

Dies würde ersetzen beliebige Anzahl in der Zeichenfolge durch die fortlaufende Nummer in der sein könnte gleiche Breite - aber lässt jede Nicht-Nummer genau gleich und am selben Ort.

2

Sie müssen die Position der ersten Ziffer in der Zeichenfolge finden. Dann teilen Sie die Zeichenfolge in 2 Felder.

MD 0 0 4 9 4

Das erste Feld wird der nicht numerische Teil "MD" seine Das zweite Feld wird der numerische Teil "00494"

seiner

Erhöhungsschritte der numerischen nur einen Teil zu „00495“

Sie werden zu den führenden Nullen verlieren, so werden Sie Ihre neue Nummer mit der gleichen Menge von Nullen müssen einmal Pad haben Sie erhöht.

Dann verbinden Sie die 2 Felder.

+1

Ich würde nach der Position der letzten Nicht-Ziffer in der Zeichenfolge suchen, anstatt der ersten Ziffer, falls es eine Zeichenfolge wie "Foo37Baz00123" ist. –

3

Angenommen, Sie müssen nur den numerischen Teil der Zeichenkette erhöhen, und die Struktur der Zeichenketten besteht immer aus einer Menge nicht numerischer Zeichen, gefolgt von einer Reihe von Ziffern. Sie können einen regulären Ausdruck verwenden Die Zeichenfolge in diese beiden Komponenten, konvertieren Sie den numerischen Teil in eine ganze Zahl, erhöhen Sie und verketten Sie dann zurück.

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

können Sie verwenden regex:

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; 

AKTUALISIERT: Das spart Ihre Null

+0

Dies würde die führenden Nullen verlieren. – juharr

2

Hier ist eine Non-Regex Weg: 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"); 

Ausgabe wäre:

newStr = "MD00495" 
0

Hier ist meine Lösung:

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

Versuchen Sie es!

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

Dies ist eine sehr generische, die für jede große Anzahl verwendet werden kann. Schritte: 1. Identifizieren Sie Zeichenfolge Teil 2. Identifizieren Nummer Teil und seine Länge 3. Inkrementnummer 4 Zeichenfolge und Nummer zusammenführen – kaushal

Verwandte Themen