Questo codice dovrebbe essere d'aiuto. Controllerà la lunghezza della stringa corrente. Se è maggiore del tuo maxLength (150) in questo caso, inizierà dal 150 ° carattere e (andando indietro) trova il primo carattere non parola (come descritto dall'OP, questa è una sequenza di caratteri non spaziali). Quindi memorizzerà la stringa fino a quel carattere e ricomincerà da capo con la stringa rimanente, ripetendo fino a quando non si finisce con una sottostringa che è inferiore ai caratteri maxLength. Infine, uniscili tutti di nuovo insieme in una stringa finale.
string line = "This is a really long run-on sentence that should go for longer than 150 characters and will need to be split into two lines, but only at a word boundary.";
int maxLength = 150;
string delimiter = "\r\n";
List<string> lines = new List<string>();
// As long as we still have more than 'maxLength' characters, keep splitting
while (line.Length > maxLength)
{
// Starting at this character and going backwards, if the character
// is not part of a word or number, insert a newline here.
for (int charIndex = (maxLength); charIndex > 0; charIndex--)
{
if (char.IsWhiteSpace(line[charIndex]))
{
// Split the line after this character
// and continue on with the remainder
lines.Add(line.Substring(0, charIndex+1));
line = line.Substring(charIndex+1);
break;
}
}
}
lines.Add(line);
// Join the list back together with delimiter ("\r\n") between each line
string final = string.Join(delimiter , lines);
// Check the results
Console.WriteLine(final);
Nota: Se si esegue questo codice in un'applicazione di console, è possibile modificare "maxLength" ad un numero più piccolo in modo che la console non va a capo su di voi.
Nota: Questo codice non ha alcun carattere di tabulazione. Se sono incluse anche le schede, la situazione diventa un po 'più complicata.
Aggiornamento: Ho risolto un errore nel caso in cui nuove righe iniziassero con uno spazio.
fonte
2012-06-08 12:31:45
espressione Perché regolare? Se mostri il tag C#, fallo tramite le funzioni C#. –
Quindi vuoi inserire interruzioni di riga per ogni riga ogni 150 caratteri? Esempio di input e output (con un limite più breve) potrebbe aiutare a visualizzare ciò che si vuole fare. – Qtax
Bummer. La regola della parola d'ordine è il dolore: come definisci una parola (molto più complicata di quanto probabilmente pensi)? – Crisfole