2014-04-05 8 views
5

Ich muss mehrere Textzeilen einrücken (im Gegensatz zu this question for a single line of text).Mehrere Textzeilen einrücken

Lasst sie sagen, das ist mein Eingabetext:

First line 
    Second line 
Last line 

Was ich brauche, ist dieses Ergebnis:

First line 
     Second line 
    Last line 

Hinweis der Vertiefung in jeder Zeile.

Dies ist, was ich bisher:

var textToIndent = @"First line 
    Second line 
Last line."; 
var splittedText = textToIndent.Split(new string[] {Environment.NewLine}, StringSplitOptions.None); 
var indentAmount = 4; 
var indent = new string(' ', indentAmount); 
var sb = new StringBuilder(); 
foreach (var line in splittedText) { 
    sb.Append(indent); 
    sb.AppendLine(line); 
} 
var result = sb.ToString(); 

Gibt es einen sichereren/einfachen Weg, es zu tun?

Mein Problem ist in der Split-Methode, die schwierig sein kann, wenn Text von Linux, Mac oder Windows übertragen wird, und neue Zeilen möglicherweise nicht korrekt auf dem Zielcomputer aufgeteilt werden.

Antwort

10

Da Sie alle Linien sind einrücken, wie wäre es, etwas zu tun:

var result = indent + textToIndent.Replace("\n", "\n" + indent); 

Welche Windows abdecken sollte \ r \ n und Unix \ n Zeilen enden.

+3

+1. Nur der Vollständigkeit halber verwenden einige obskure/Legacy-Systeme andere "Newline" -Kombinationen: [Newline-Darstellungen] (http://en.wikipedia.org/wiki/Newline#Representations). – Sphinxxx

+3

Bitte verwenden Sie 'Environment.NewLine' anstelle von' "\ n" '... – aloisdg

+4

Das ist großartig, danke! Und ich bin mir nicht sicher "\ n", aber in der Tat denken, das "\ n" könnte besser sein, wenn Sie nur mit Windows und Unix zu tun haben, da dies Strings vom anderen System analysiert werden. Andernfalls werden Windows-Umgebungen die Unix-Zeilenumbrüche nicht ersetzen. Aber wenn Sie Mac OS 9 (oder andere) unterstützen müssen, würde die Environment.NewLine besser funktionieren, denke ich. –

4

Ersetzen Sie einfach Ihre Newline mit newline + indent:

var indentAmount = 4; 
var indent = new string(' ', indentAmount); 
textToIndent = indent + textToIndent.Replace(Environment.NewLine, Environment.NewLine + indent); 
Verwandte Themen