Autor Beitrag
sebastian1234
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46



BeitragVerfasst: Mo 07.04.14 10:53 
Guten Morgen,

ich würde gerne folgenden String bearbeiten!

Ausgangsstring: {1,3} {2} {4,5,6}
Gewünschtes Ergebnis:
1;1,3
2;2
3;4,5,6

Die 1,2,3 vor dem Simkolon stehten jeweils für die Klammern!

Folgender Code ist bisher implementiert!

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
public static void Main(String[] args)
        {
            String str = "{1,3} {2} {4,5,6}";

            string[] arr = str.Split("}".ToCharArray());

            int i = 1;
            foreach (string s in arr)
            {
                
                Console.WriteLine(i + s );
                i++;
            }
            Console.WriteLine(arr[0]);
            Console.ReadLine();

        }


Allerdings sieht das Ergebnis so aus...

1{1,3
2 {2
3 {4,5,6
4
{1,3

Ich weiß nicht wie ich die "Split-Funktion" bauen soll, sodass "{}" als ein Element gesehen wird was zusammen gehört und mir das ERgebnis oben liefert?

Grüße!
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mo 07.04.14 11:12 
Zu deinem Fehler:

Wenn du einfach nur die schließende Klammer zum splitten nimmst, ist das Ergebnis klar. Setze einfach ein Array mit den geschweiften Klammern rein: new char[] { '{''}' }

Deine Methode funktioniert zwar (wenn denn SPlit richtig benutzt wird), wirklich gut finde ich das Vorgehen aber nicht.
Außerdem: Bloß keine foreach-Schleife als for-Schleife missbrauchen, dann lieber gleich for.

Hier mal deine Variante überarbeitet:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
var input = "{1,3} {2} {4,5,6}";

var inputParts = input.Split(new char[] { '{''}' });
inputParts = inputParts.Where(s => !string.IsNullOrWhiteSpace(s)).ToArray();

for (int i = 0; i < inputParts.Length; i++)
    Console.WriteLine((i + 1) + " -> " + inputParts[i]);



Andere Möglichkeiten:


Wenn es in den geschweiften Klammern keine Leerzeichengibt, kannst du doch anhand der Leerzeichen den String splitten.
Dann hast du einige Teilstrings, die mit geschweiften Klammern beginnen und enden, die du dann nur noch abschneiden musst.

Ein anderer Weg wäre, Zeiche für Zeichen zu durchlaufen und in einer boll-Variable zu merken, ob du gerade in geschweiften Klammern bist, oder nicht.
Ein dritter Weg wäre Regex. Damit kannst du dann auch sehr viel machen, musst aber erst damit klar kommen.

Für diesen Beitrag haben gedankt: sebastian1234