C# String in Array umwandeln?

2 Antworten

Von Experte Erzesel bestätigt

Wie du bereits richtig erkannt hast musst du den String "splitten".
Das Problem mit der normalen Split-Methode ist jedoch, dass hier mehrere Seperatoren direkt aufeinanderfolgen. Die Split-Methode liefert dann jeweils das zurück, was zwischen diesen Separatoren ist - einen leeren String. Folglich bekommst du dann ["11", "", "", "Hallo", "", "", "12]. Das ist natürlich ein Problem.

Lösung:

Wir verwenden das normale .Split und übergeben als zweites Element eine StringSplitOption, die festlegt, dass im Ergebnis keine leeren Strings enthalten sein dürfen.

.Split(new string[] { "-", " " }, StringSplitOptions.RemoveEmptyEntries)
Alternative Lösung:

Wir verwenden Regex#Split, um mehrere hintereinanderfolgende Separatoren als einen einzigen zu betrachten. In dem Fall verwenden wir als Separator also "ein oder mehrere [+] nicht-alphanummerische Zeichen [\\W]".

new Regex("\\W+").Split(a)

Um diesen Code zu verwenden muss man aber Regex einbinden, danke an @malte314 für den Hinweis.

using System.Text.RegularExpressions;

Erzesel  24.10.2023, 08:39

Verwende Regex(@"\s+-\s+").Split().

\w+ ist kritisch, da Substrings theoretisch auch andere Wortgrenz-Zeichen enthalten könnten, welche vom vorgesehenen " - " als Delimiter abweichen können.

"11 - Hallo - 3.14 - blub.com" würde mit \w+ seines Sinnes beraubt.

Wenn sicher ist , dass keine anderen potentiellen Delimiter enthalten sind mag man mit \w arbeiten können , aber ich habe schon "Pferde vor der Apotheke 🤮 " gesehen.

Deshalb bei RegEx immer so präzise angeben was man will.

Je mehr Zeichen eine verwendete Zeichenklasse enthält, um so grober wird der "Schlag".

0
MrAmazing2  24.10.2023, 19:29
@Erzesel

Jo kommt halt drauf an ob er immer fix „ - ” als Delimiter hat oder ob auch andere Sonderzeichen der/im Delimiter sein könnten.

1

Die von dir gesuchte Operation nennt sich meisten "split". Ich schicke dir den Link zur Dokumentation der Methode, dort gibt es auch Beispiele (gegooglet habe ich dafür "C# string split").

https://learn.microsoft.com/de-de/dotnet/api/system.string.split?view=net-7.0

Woher ich das weiß:Studium / Ausbildung – B.Sc. Computer Science

spaghetto711731 
Fragesteller
 23.10.2023, 21:06

Ja darauf bin ich auch gestossen aber egal was ich versuche die leerzeichen sind immer noch da😬

0
malte314  23.10.2023, 21:08
@spaghetto711731

Teil einer gut gestellten Programmierfrage ist es darzulegen, was man erfolglos probiert hat. Rufst Du denn also folgendes auf:

a.Split("-", " ");

oder was hast Du versucht?

0
spaghetto711731 
Fragesteller
 23.10.2023, 21:12
@malte314

Das habe ich einmal versucht ja..

und noch char[] seperators = {' ', '-'}
a.Split(seperators)

dann mit ner foreach über das neue array der output ist dann aber

11

Hallo

12

also mit einigen zeilen dazwischen.. normalerweise sollte alles direkt untereinander sein

und das array hat auch mehr als 3 inhalte

0
spaghetto711731 
Fragesteller
 23.10.2023, 21:16
@spaghetto711731

Ergänzung: das wort Hallo ist dadurch jetzt zum beispiel am index [3] des neuen Arrays obwohl es ja bei [1] sein sollte

0
spaghetto711731 
Fragesteller
 23.10.2023, 21:42
@malte314

Ah super mit RemoveEmpyEntries hats geklappt..

ich verstehe nur nicht wieso es davor nicht funktioniert hat

trotzdem danke :)

1
MrAmazing2  23.10.2023, 21:48
@spaghetto711731

Siehe meine Antwort, da hab ich erklärt warums davor nicht funktioniert hat.

Nochmal etwas schöner ausgedrückt, vlt. versteht man es dann:

String.Split() behandelt alle Vorkommen der angegebenen Trennzeichen (in diesem Fall "-" oder " ") als Trennpunkte. Wenn mehrere Trennzeichen direkt aufeinanderfolgen, werden diese als aufeinanderfolgende Trennpunkte interpretiert, und dadurch entstehen leere Zeichenfolgen zwischen ihnen. Die Split funktion gibt alles aus, was zwischen den Trennpunkten ist, auch leere Zeichenfolgen.

Falls du es immernoch nicht verstehst mach ich gerne ein Beispiel ^^

0
spaghetto711731 
Fragesteller
 23.10.2023, 22:58
@MrAmazing2

Achso ne sorry ich hatte deine Antwort nur zu dem Zeitpunkt noch gar nicht gelesen😅

1