2017-01-09 21 views
-3

Wie kann ich nur ein Vielfaches von 3 in C# zu ersetzen? Nehmen wir zum Beispiel hatte ich die Zeichenfolge "000100000", und ich wollte "000" mit "+" ersetzt werden, aber nur jede Gruppe von drei Zeichen. Zusätzliche Bedingung: Die Gruppen sollten geändert werden beginnend mit dem Ende: z. für "000100000" sollte es "+100+" ausgeben.Ersetzen nur Vielfache von drei in C#

+0

String ist das, was Sie suchen, Google es, versuchen, etwas:

"[0]{3}|[1]{3}" 

Die oben Regular Expression kann Gebrauch wie unten in C# sein. – Universus

+0

Dies ist ein sehr einfaches algorithmisches Problem. Jeder, der ein Programmierer sein möchte und einige Grundlagen kennt, sollte in der Lage sein, dies selbst zu verstehen. Haben Sie keine Angst davor, Ihre eigenen Kenntnisse zu erweitern, um solche einfachen Fragen alleine zu lösen. –

+1

Bitte fügen Sie weitere Details zu Ihrer Frage hinzu - Kann die Eingabe eine Zeichenfolge sein? Warum ändert der Algorithmus in Ihrem obigen Beispiel nicht 000100000 in + 1 + 00? (000) 1 (000) 00 sind Dreiergruppen. Außerdem ist der Stapelüberlauf keine Seite, auf der Leute Antworten für Sie schreiben. Bitte zeigen Sie, was Sie bereits versucht haben oder welche konkreten Probleme Sie haben. – PartlyCloudy

Antwort

0

Ich schlage vor, mit regulären Ausdrücken, z.B .:

string source = "000100000"; 

// "+100+" 
string result = Regex.Replace(
    source, 
    "0{3,}", 
    match => new string('0', match.Length % 3) + new string('+', match.Length/3)); 

Tests:

001  -> 001 
    0001  -> +1 
    000100  -> +100 
    0001000 -> +1+ 
    00010000 -> +10+ 
    000100000 -> +100+ 
    0001000000 -> +1++ 
-1

Umkehren der Zeichenfolge, bevor Sie ersetzen und nach löst Ihr Problem.

so etwas wie:

string ReplaceThreeZeros(string text) 
{ 
    var reversed = new string(text.Reverse().ToArray()); 
    var replaced = reversed.Replace("000","+"); 
    return new string(replaced.Reverse().ToArray()); 
} 
+0

Ich sehe nicht, wie das Umkehren des Textes hilft. Auch ging es nicht um Gruppen von 3 "0", sondern um Gruppen von 3 im Allgemeinen. – Abion47

0

Sie können dies mit Substring:

string strReplace = "000100000"; 

//Store your string on StringBuilder to edit the string 
StringBuilder sb = new StringBuilder(); 

sb.Append("+"); 
sb.Append(strReplace.Substring(0, 3)); //Use substring, 0 is the start of index and 3 is the length as your requirement 
sb.Append("+"); 
sb.Append(strReplace.Substring(3, 3)); 
sb.Append("+"); 
sb.Append(strReplace.Substring(6, 3)); 
sb.Append("+"); 

strReplace = sb.ToString(); //Finally replace your string instance with your result 

Oder durch for-Schleife, aber dieses Mal anstelle String zu verwenden, verwenden wir Char-Array in jedem Zeichen, um Ihre string:

 string strReplace = "000100000"; 
     char[] chReplace = strReplace.ToCharArray(); 
     StringBuilder sb = new StringBuilder(); 
     for (int x = 0; x <= 8; x++) 
     { 
      if (x == 0 || x == 3 || x == 6 || x == 9) 
      { 
       sb.Append("+"); 
       sb.Append(chReplace[x]); 
      } 
      else 
      { 
       sb.Append(chReplace[x]); 
      } 
     } 
     sb.Append("+"); 
     strReplace = sb.ToString(); 
+1

Eh, '(x == 0 || x == 3 || x == 6 || x == 9)' sieht * suspecious * aus, warum nicht '... && x == 12 || x == 15 || ... || x == 3003 || ... '? Wahrscheinlich meinst du 'x% 3 == 0' –

+0

Wenn ich && verwende, wird es nur ausgelöst, wenn alle Bedingungen auf x erfüllt sind. –

1

Sie können einfach einen regulären Ausdruck dafür verwenden.

(0{3}(?!0+)) 

Dieser verwendet eine negative Vorschau um sicherzustellen, dass es keine andere Nullen nach einer Gruppe von drei 0s - mit anderen Worten, für eine Folge von einer beliebigen Anzahl von 0en, wird es paßt nur die letzte 3.

Sie können dies ändern, wenn Sie etwas auf subtile Weise anders suchen Lookaheads und Lookbehinds tun wollen.

0

Okay, ein paar dieser Antworten adressieren Erfassungs Gruppen von 3 '0' s. Hier ist eine Antwort, die mit Gruppen von 3 anythings (Lesen Sie die Zeichenfolge in Gruppen von drei Zeichen) beschäftigt:

string GroupsOfThree(string str) 
{ 
    StringBuilder sb = new StringBuilder(); 

    for (int i = 0; i + 2 < str.Length; i += 3) 
    { 
     string sub = str.Substring(i, 3); 
     if (sub.All(c => c == sub[0])) 
      sb.Append("+"); 
     else 
      sb.Append(sub); 
    } 

    return sb.ToString(); 
} 
0

Sie können einen regulären Ausdruck ersetzen verwenden. erste

string k = "000100000"; 
Regex pattern = new Regex("[0]{3}|[1]{3}"); 
pattern.Replace(k, "+");