2014-04-05 5 views
5

Potrzebuję wcięcia wielu wierszy tekstu (w przeciwieństwie do this question for a single line of text).Wcięcie wielu wierszy tekstu

Powiedzmy to mój tekst wejściowy:

First line 
    Second line 
Last line 

Co potrzebne jest to wynik:

First line 
     Second line 
    Last line 

Wskazówka wcięcie w każdej linii.

To, co mam tak daleko:

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

Czy jest bezpieczniejsze/prostszy sposób to zrobić?

Moja troska dotyczy metody dzielenia, która może być trudna, jeśli tekst z systemu Linux, Mac lub Windows zostanie przeniesiony, a nowe linie mogą nie zostać poprawnie podzielone na komputerze docelowym.

Odpowiedz

10

Ponieważ jesteś wcięć wszystkie wiersze, jak o zrobić coś takiego:

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

który powinien obejmować zarówno Windows \ r \ n i Unix \ n końca linii.

+3

+1. Tylko dla kompletności, niektóre niejasne/starsze systemy wykorzystują inne kombinacje "nowej linii": [reprezentacje Newline] (http://en.wikipedia.org/wiki/Newline#Representations). – Sphinxxx

+3

Proszę użyć 'Environment.NewLine' zamiast' \ n "' ... – aloisdg

+4

To świetnie, dziękuję! I nie jestem pewien co do "\ n", ale uważam, że "\ n" może być lepszy, jeśli po prostu musisz radzić sobie z Windows i Unixem, ponieważ będzie on analizował ciągi wysyłane przez inny system. W przeciwnym razie środowiska Windows nie zastąpią nowych linii Unix. Ale jeśli potrzebujesz wsparcia dla Mac OS 9 (lub innych), Environment.NewLine będzie działać lepiej, jak sądzę. –

4

Wystarczy zastąpić przełamane z nowej linii tiret +:

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