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#
Antwort
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++
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());
}
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
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();
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' –
Wenn ich && verwende, wird es nur ausgelöst, wenn alle Bedingungen auf x erfüllt sind. –
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.
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();
}
Sie können einen regulären Ausdruck ersetzen verwenden. erste
string k = "000100000";
Regex pattern = new Regex("[0]{3}|[1]{3}");
pattern.Replace(k, "+");
- 1. ersetzen nur die ersten drei Vorkommen mit PHP
- 2. String Ersetzen in C++
- 3. Magento - Mindestbestellmenge und Vielfache
- 4. Finden Vielfache von ganzen Zahlen schnell
- 5. Gemeinsame Höhe von letzten drei Bildern nur
- 6. ersetzen nur in gewünschtem Spiel
- 7. C# Regex Ersetzen, aber nur eine nummerierte Untergruppe ersetzen
- 8. Runden von Zahlen auf bestimmte Vielfache
- 9. Array-Nummer, die Vielfache von 3 sind
- 10. AutoLayout UITableViewCell Höhe Vielfache von TableView/Screen
- 11. Filter nur drei Zeichen in der Shell
- 12. Foreach-Schleife beendet nach nur drei Werte hinzufügen C#
- 13. wie zeit von drei textbox in nur einem label anzeigen?
- 14. Wählen Sie Elemente aus nur einer Liste von drei
- 15. XOR von drei Werten
- 16. AngularJs Filterung mit drei Filtern, aber nur zwei der drei
- 17. Round ganze Zahl nächste Vielfache von 5 in PHP
- 18. Platzhalterzeichenkette ersetzen in C#
- 19. Warum ersetzen mit $$ nur $
- 20. Holen Sie sich das Vielfache von 5 aus einer Liste
- 21. PHP ersetzen nur Klartext
- 22. Pandas ersetzen nur ein Teil einer Säule
- 23. Wie kann ich das richtige Vielfache auswählen?
- 24. Regex ersetzen nur Buchstaben
- 25. Ersetzen 'mit \' in C#
- 26. Nummer in Zeichenfolge ersetzen - C#
- 27. C# - Ersetzen von Text in ListBox
- 28. Ersetzen von Zeichen in C# -String
- 29. Ersetzen Funktionszeiger von Vorlagen in C++ 11
- 30. mysql drei Tabellen verbinden, ersetzen ID mit seinem Wert
String ist das, was Sie suchen, Google es, versuchen, etwas:
Die oben Regular Expression kann Gebrauch wie unten in C# sein. – Universus
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. –
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