c# - new - string format line break java




Einfachste Möglichkeit, eine Zeichenfolge in Newlines in.NET zu teilen? (10)

Berücksichtigen Sie Guffas Antwort in einer Erweiterungsklasse:

public static string[] Lines(this string source) {
    return source.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
}

Ich muss einen String in Zeilenumbrüche in .NET aufteilen, und die einzige Möglichkeit, Strings zu trennen, ist die Split Methode. Aber das wird es mir nicht erlauben, (einfach) auf einer neuen Zeile zu teilen, also was ist der beste Weg, es zu tun?


Dachte nur, ich würde meine zwei Bits hinzufügen, weil die anderen Lösungen zu dieser Frage nicht in die wiederverwendbare Code-Klassifizierung fallen und nicht bequem sind. Der folgende Codeblock erweitert das string so, dass es beim Arbeiten mit Zeichenfolgen als natürliche Methode zur Verfügung steht.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.Collections.ObjectModel;

namespace System
{
    public static class StringExtensions
    {
        public static string[] Split(this string s, string delimiter, StringSplitOptions options = StringSplitOptions.None)
        {
            return s.Split(new string[] { delimiter }, options);
        }
    }
}

Sie können jetzt die Funktion .Split() aus einer beliebigen Zeichenfolge wie folgt verwenden:

string[] result;

// pass a string, and the delimiter
result = string.Split("My simple string", " ");

// split an existing string by delimiter only
string foo = "my - string - i - want - split";
result = foo.Split("-");

// you can even pass the split options param. when omitted it is
// set to StringSplitOptions.None
result = foo.Split("-", StringSplitOptions.RemoveEmptyEntries);

Um auf ein Zeilenumbruchzeichen zu teilen, übergeben Sie einfach "\n" oder "\r\n" als Trennzeichenparameter.

Kommentar: Es wäre schön, wenn Microsoft diese Überlastung implementieren würde.


Für eine String-Variable s :

s.Split(new string[]{Environment.NewLine},StringSplitOptions.None)

Dies verwendet die Definition von Zeilenenden in Ihrer Umgebung. Unter Windows sind Zeilenenden CR-LF (Wagenrücklauf, Zeilenvorschub) oder in C # Escape-Zeichen \r\n .

Dies ist eine zuverlässige Lösung, denn wenn Sie die Zeilen mit String.Join , entspricht dies Ihrer ursprünglichen Zeichenfolge:

var lines = s.Split(new string[]{Environment.NewLine},StringSplitOptions.None);
var reconstituted = String.Join(Environment.NewLine,lines);
Debug.Assert(s==reconstituted);

Was nicht zu tun ist:


Ich verwende diese Funktion (basierend auf anderen Antworten) derzeit in VB.NET:

Private Shared Function SplitLines(text As String) As String()
    Return text.Split({Environment.NewLine, vbCrLf, vbLf}, StringSplitOptions.None)
End Function

Es versucht zuerst, sich auf dem plattform-lokalen Newline zu teilen und fällt dann auf jede mögliche neue Zeile zurück.

Ich habe das bisher nur in einer Klasse gebraucht. Wenn sich das ändert, werde ich das wahrscheinlich Public und es in eine Utility-Klasse verschieben und vielleicht sogar zu einer Erweiterungsmethode machen.

Hier erfahren Sie, wie Sie die Linien wieder zusammenführen können:

Private Shared Function JoinLines(lines As IEnumerable(Of String)) As String
    Return String.Join(Environment.NewLine, lines)
End Function

Nun, eigentlich sollte Split tun:

//Constructing string...
StringBuilder sb = new StringBuilder();
sb.AppendLine("first line");
sb.AppendLine("second line");
sb.AppendLine("third line");
string s = sb.ToString();
Console.WriteLine(s);

//Splitting multiline string into separate lines
string[] splitted = s.Split(new string[] {System.Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries);

// Output (separate lines)
for( int i = 0; i < splitted.Count(); i++ )
{
    Console.WriteLine("{0}: {1}", i, splitted[i]);
}

Regex ist auch eine Option:

    private string[] SplitStringByLineFeed(string inpString)
    {
        string[] locResult = Regex.Split(inpString, "[\r\n]+");
        return locResult;
    }

Sie sollten in der Lage sein, Ihre Zeichenfolge ziemlich leicht zu teilen, so:

aString.Split(Environment.NewLine.ToCharArray());

Um auf einen String zu teilen, müssen Sie die Überladung verwenden, die ein Array von Strings benötigt:

string[] lines = theText.Split(
    new[] { Environment.NewLine },
    StringSplitOptions.None
);

Bearbeiten:
Wenn Sie verschiedene Arten von Zeilenumbrüchen in einem Text behandeln möchten, können Sie mehrere Zeichenfolgen zuordnen. Dies wird korrekt bei beiden Arten von Zeilenumbrüchen aufgeteilt und leere Zeilen und Leerzeichen im Text beibehalten:

string[] lines = theText.Split(
    new[] { "\r\n", "\r", "\n" },
    StringSplitOptions.None
);

Was ist mit einem StringReader ?

using (System.IO.StringReader reader = new System.IO.StringReader(input)) {
    string line = reader.ReadLine();
}

// using System.IO;

string textToSplit;

  if(textToSplit!=null)
   {
    List<string> lines = new List<string>();
    using (StringReader reader = new StringReader(textToSplit))
    {
        for (string line = reader.ReadLine(); line != null;line = reader.ReadLine())
        {
            lines.Add(line);
        }
    }
   }




split