Ich habe in das Schreiben einer Word-Wrap-Konsolenanwendung in C# untersucht. Ich habe hier viele nützliche Beispiele gefunden, aber ich habe Probleme mit dem, was ich gerade habe.C# Zeilenumbruch, wie die Erstellung neuer Zeilen basierend auf verschiedenen Wörtern in einer Zeichenfolge zu begrenzen
Der Code, den ich habe, wird eine neue Zeile nach jedem Wort erstellen, das die columnLimit
"überläuft". Ich möchte/brauche eine Möglichkeit, eine neue Zeile nur dann hinzuzufügen, wenn dieses Wort nicht das letzte in der Zeichenfolge ist, und wenn möglich, einen Bindestrich hinzuzufügen, wenn das Wort zwischen zwei Zeilen überläuft (so wird es ein Wortsplitter nicht sein Wortumhüllung).
Ich weiß, es ist wahrscheinlich eine wirklich einfache Lösung, aber ich bin neu in C# und ich bin wirklich auf dieses Problem fest. Eine Kodierungslösung, damit ich sehen kann, wo ich falsch gelaufen bin, wäre ideal.
Kann mir jemand dabei helfen?
public string formatText(string longSentence, int columnLimit)
{
string[] words = longSentence.Split(' ');
StringBuilder newLongSentence = new StringBuilder();
string line = "";
foreach (string word in words)
{
if ((line + word).Length > columnLimit)
{
newLongSentence.AppendLine(line);
line = "";
}
line += string.Format("{0} ", word);
}
if (line.Length > 0)
newLongSentence.AppendLine(line);
return newLongSentence.ToString();
}
Dies ist fast perfekt - auf den Code jedoch läuft es noch schafft eine neue Linie auch nach der Letztes Wort in der Zeichenfolge .. irgendeine Idee, wie das zu beheben? (es ist das Hauptproblem, das meine Tests zum Scheitern bringt) – Dusky
Bearbeitet, um das zu ändern, hoffe, dass dies für Sie jetzt funktioniert –
Wenn es jetzt ausgeführt wird bewirkt, dass eine ArgumentOutOfRangeException in dieser Zeile nicht behandelt wurde (newLongSentence.AppendLine (line + word.Substring (0, word.length + extraLetters - 1) + "-"), die zusätzliche Information sagt: Länge kann nicht kleiner als Null sein. – Dusky