Gehen Sie zu jedem Leerzeichen in einem string. C#
Ist es möglich, zu übergeben einen string, der Suche nach dem Leerzeichen?
Beispielsweise ein Datensatz von:
string myString = "aa bbb cccc dd";
Wie könnte ich die Schleife Durchlaufen, und erkennen jeden weißen Raum, und zu manipulieren, dass der Raum?
Muss ich tun, diese auf möglichst effiziente Weise möglich.
Dank.
UPDATE:
Ich brauche zu manipulieren, um den Raum durch die Erhöhung der Leerzeichen aus einem integer-Wert. So zum Beispiel mehr Platz zu haben 3 Leerzeichen anstelle von einem. Würde ich gerne machen geht es durch einen weißen Raum, in einer Schleife, jede Methode, dies zu tun bereits .NET? Durch white-space-und ich meine ' '.
manipulate that space
Wie?- "Erkennen" und zu "Manipulieren", wie?
- en masse oder von Fall zu Fall?
- Können Sie qualifizieren sich die "effizienteste Art und Weise möglich'? Was ist dein problem domain?
- Finden Sie den index der einzelnen Räume mit Hilfe von String.IndexOf(" ") und zuweisen einer array-Liste. Wollen Sie den code für Sie? Aber wie die vorherigen Kommentatoren, zu manipulieren, wie genau?
- Schwierig zu beurteilen, was Sie tun möchten, aber Sie können split die Zeichenfolge in einem Raum (mit string.split) und dann die Ergebnisse verwenden, wie Sie möchten. Was tun Sie wirklich wollen, zu tun mit dem Raum?
- Könntest du erklären, was du meinst mit "erkennen" Leerzeichen? Möchten Sie einen index zu Beginn jedes whitespace-Zeichen? Auch, was ist Ihre definition von whitespace (Leerzeichen, tabs, CR, LF)?
- Ich brauche zu manipulieren, um den Raum durch die Erhöhung der Leerzeichen aus einem integer-Wert. So zum Beispiel mehr Platz zu haben 3 Leerzeichen anstelle von einem. Würde ich gerne machen geht es durch einen weißen Raum, in einer Schleife, jede Methode, dies zu tun bereits .NET? Durch den weißen Raum, den ich meine, ein ' '.
- Ist es ein statischer Wert?
yourString.Replace(" ", "whatever you want")
?- Ich werde aktualisieren Sie Ihre OP mit Ihrem letzten Kommentar, zur Klärung der Frage für die Leser.
- Aktualisiert meine Lösung entsprechend Ihrer Notwendigkeit für mehrere Räume, können Sie mit der C# - string-Konstruktor dynamisch erstellt eine Zeichenfolge mit einer bestimmten Anzahl von Leerzeichen, also: new String(' ', 5)" "
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, ersetzen Sie alle Leerzeichen in einem Schlag, die Sie tun können:
Wenn Sie wollen, um zu gehen von Fall zu Fall (das ist, nicht nur eine Masse zu ersetzen), können Sie eine Schleife durch
IndexOf()
:UPDATE
Als Sie nach Ihrem update, Sie könnte an die Stelle der einzelnen Räume mit der Anzahl der Leerzeichen angegeben, die durch eine variable (wie numSpaces) wie folgt:
Können Sie die
Regex.Replace
Methode. Dies ersetzt eine Gruppe von white-space-Zeichen mit einem Bindestrich:Update:
Diese finden Gruppen von Leerzeichen und ersetzen Sie diese mit dem tripple Höhe der Räume:
Aber das ist ein bisschen zu einfach zu machen Verwendung von regulären Ausdrücken. Sie können das gleiche tun mit einem normalen ersetzen:
Diese wird, ersetzen Sie jedes Leerzeichen intead ersetzen Gruppen von Räumen, sondern die regelmäßige ersetzen ist viel einfacher als
Regex.Replace
, so sollte es immer noch mindestens genauso schnell, und der code ist einfacher.Regex.Replace
, aber es ist nicht die einfachste Lösung (vor allem angesichts der Frage). Ich meine, haben Sie die regex-Muster und einen lambda-Ausdruck.Wenn Sie nur wollen, um zu ersetzen Sie alle Leerzeichen durch ein anderes Zeichen:
Wenn Sie brauchen die Möglichkeit, etwas anderes zu tun zu jeder:
Edit:
Pro Ihren Kommentar Klärung Ihrer Frage:
Verändern jeden Raum um drei Leerzeichen, können Sie dies tun:
Jedoch beachten, dass diese nicht berücksichtigt werden Fälle, in denen Sie Ihre Eingabezeichenfolge hat bereits zwei oder mehr Leerzeichen. Wenn das ist eine Möglichkeit, Sie wollen einen regex verwenden.
Char.IsWhiteSpace
in der if-Anweisung zu entsprechen, werden alle whitespace-Zeichen, dann 'etwas tun' würde, Anhängen von Zeichen, um eineStringBuilder
Je nachdem, was Sie sind tring zu tun:
Oben ist ein Durchgang durch die Zeichenfolge, so ist es O(n). Sie können nicht wirklich effizienter, die.
Jedoch, wenn Sie möchten, Bearbeiten Sie die ursprüngliche Zeichenfolge Ihre beste Wette ist, Verwenden Sie einen StringBuilder um die änderungen zu verarbeiten:
Schließlich, vergessen Sie nicht über Reguläre Ausdrücke. Es kann nicht immer die effizienteste Methode in Bezug auf code-Laufzeit-Komplexität mit sich, aber die Effizienz der Codierung kann es ein guter trade-off.
Zum Beispiel, hier ist ein Weg, um mit allen Leerzeichen:
Und hier ist ein Weg, um zu ersetzen Sie alle Leerzeichen mit einer beliebigen Zeichenfolge:
LINQ-Abfrage unten gibt eine Reihe von anonymous-Art-Elemente mit zwei Eigenschaften - "sybmol" steht für ein Leerzeichen, und "index" - index in der Eingabe-Sequenz. Danach haben Sie alle whitespace-Zeichen und eine position in der Eingangs-Sequenz, jetzt Sie können tun, was Sie wollen mit diesem.
EDIT: Für pädagogische Zwecke unten ist die Umsetzung, die Sie suchen, aber natürlich im realen system, Verwendung in string-Konstruktor und
String.Replace()
wie gezeigt, in anderen AntwortenWenn Sie möchten, ersetzen Sie die Leerzeichen mit, z.B. '_', können Sie mit String.Ersetzen.
Beispiel:
In Fall, dass Sie wollen
left/right justify
Ihren stringVerwenden
string.Replace()
.