C# Zeichfolge entfernen



  • Hallo,

    ich brauche eure Hilfe in C#.

    Ich möchte in einer String-Zeichenfolge nach einem Punkt "." suchen und es mit alles was danach steht entfernen.
    z.B.: 3A5.551A2 soll zu 3A5

    Gibt es da eine Simple-Funktion?

    Gruß
    Rudi



  • Tipp: String.IndexOf und String.Substring sind deine Freunde 🙂



  • string.Concat("3A5.551A2".TakeWhile(c => c != '.'))
    

    😕



  • gelinqt schrieb:

    string.Concat("3A5.551A2".TakeWhile(c => c != '.'))
    

    😕

    Find ich nicht gut. Ist absolut nicht verstaendlich.



  • Firefighter schrieb:

    gelinqt schrieb:

    string.Concat("3A5.551A2".TakeWhile(c => c != '.'))
    

    😕

    Find ich nicht gut. Ist absolut nicht verstaendlich.

    Nur für jemand der kein Linq kennt.



  • loks schrieb:

    Firefighter schrieb:

    gelinqt schrieb:

    string.Concat("3A5.551A2".TakeWhile(c => c != '.'))
    

    😕

    Find ich nicht gut. Ist absolut nicht verstaendlich.

    Nur für jemand der kein Linq kennt.

    Ich schaetz mich jetzt nicht so ein das ich kein Linq kenne, aber ein SubString ist semantisch bei weiten staerker 🙂 Ist aber nur eine persoenliche Empfindung.



  • loks schrieb:

    Firefighter schrieb:

    gelinqt schrieb:

    string.Concat("3A5.551A2".TakeWhile(c => c != '.'))
    

    😕

    Find ich nicht gut. Ist absolut nicht verstaendlich.

    Nur für jemand der kein Linq kennt.

    Der Code ist falsch und liefert nicht das, was Du vielleicht erwartest.



  • Und der Code ist ein super Beispiel dafür wie man Programme künstlich langsam machen kann.
    Viel dümmer kann man es nicht anstellen.



  • µ schrieb:

    loks schrieb:

    Firefighter schrieb:

    gelinqt schrieb:

    string.Concat("3A5.551A2".TakeWhile(c => c != '.'))
    

    😕

    Find ich nicht gut. Ist absolut nicht verstaendlich.

    Nur für jemand der kein Linq kennt.

    Der Code ist falsch und liefert nicht das, was Du vielleicht erwartest.

    Soso. Also ich erwarte das er "3A5" liefert und hmm, genau das tut er auch. Was erwartest Du denn?



  • loks schrieb:

    µ schrieb:

    loks schrieb:

    Firefighter schrieb:

    gelinqt schrieb:

    string.Concat("3A5.551A2".TakeWhile(c => c != '.'))
    

    😕

    Find ich nicht gut. Ist absolut nicht verstaendlich.

    Nur für jemand der kein Linq kennt.

    Der Code ist falsch und liefert nicht das, was Du vielleicht erwartest.

    Soso. Also ich erwarte das er "3A5" liefert und hmm, genau das tut er auch. Was erwartest Du denn?

    string.Concat kennt erst ab NET 4.X IEnumerable. Davor wird die object-Überladung der Methode aufgerufen und Du kriegst nichts weiter als den Typ:

    System.Linq.Enumerable+<TakeWhileIterator>d__40`1[System.Char]
    

    Einfache Problem total umständlich gelöst und schon knallt's auf NET 3.5 und kleiner. Gerade weil string.Concat kein Teil von LINQ ist und die Lösung nicht mal sehr sauber ist.



  • Klarer Fall von Lesbarkeit vs. Coolness/"Es ist Stylisch"



  • David W schrieb:

    Klarer Fall von Lesbarkeit vs. Coolness/"Es ist Stylisch"

    Lesbarkeit ist auch immer eine Frage des Contexts. Wenn ich drum herum fast nur Linq Statements habe, dann kann es die Lesbarkeit auch fördern wenn man mit einer Lösung in der gleichen Technologie bleibt.

    Sicher ist die Performance an der Stelle ein guter Kritikpunkt, wenn es sich um eine performancerelevante Stelle handelt.

    Und Sorry: zeichen.SubString(0, zeichen.Indexof('.'))

    ist auch nur dan lesbarer wenn man daran gewohnt ist. btw, ist es jetzte zeilen.IndexOf() oder Zeilen.IndexOf()+1 wenn man den Punkt nicht mitnehmen will? Jeder, der über die Frage nachdenken mußte beweist eher die schlechtere Lesbarkeit der IndexOf-Variante.



  • loks schrieb:

    Und Sorry: zeichen.SubString(0, zeichen.Indexof('.'))

    ist auch nur dan lesbarer wenn man daran gewohnt ist. btw, ist es jetzte zeilen.IndexOf() oder Zeilen.IndexOf()+1 wenn man den Punkt nicht mitnehmen will? Jeder, der über die Frage nachdenken mußte beweist eher die schlechtere Lesbarkeit der IndexOf-Variante.

    Was ist denn das fuer ein bloedes Argument? Wenn ich mit dem zaehlen von Indizies nicht auskenne, dann hab ich in der Programmierung nichts verloren.
    🙄



  • zeichen.SubString(0, zeichen.Indexof('.'))
    

    ist eh falsch, wenn in "zeichen" gar kein Punkt ist.

    Lesbar und korrekt ist das, was am einfachsten ist:

    //Pre-condition: str != null
    int dotPos = str.IndexOf('.');
    if (dotPos == -1)
        //return oder Fehler oder was auch immer
    
    string subStr = str.Substring(0, dotPos);
    


  • Geht nichtmal schief wenn kein Punkt enthalten ist:

    str.Split('.')[0]
    

    Und für unsere LINQ-Freunde

    str.Split('.').First()
    

    😉

    Noch ein bisschen Extension-Blödsinn

    static string SubstrBefore(this string s, char c)
    {
     return s.Split(c)[0];
    }
    
    str.SubstrBefore('.')
    

    WOW!

    Damit es aber nicht zu einem Technologiebruch und ganz viel Verwirrung kommt und man im LINQ Umfeld mit purem LINQ arbeiten kann

    string str = "3A5.551A2"
    	.TakeWhile(c => c != '.')
    	.Select(c => c.ToString())
    	.Aggregate((a, b) => a + b);
    

    Toll was heutzutage alles möglich ist!!!111



  • GPC schrieb:

    zeichen.SubString(0, zeichen.Indexof('.'))
    

    ist eh falsch, wenn in "zeichen" gar kein Punkt ist.

    Lesbar und korrekt ist das, was am einfachsten ist:

    //Pre-condition: str != null
    int dotPos = str.IndexOf('.');
    if (dotPos == -1)
        //return oder Fehler oder was auch immer
    
    string subStr = str.Substring(0, dotPos);
    

    👍



  • Ich wollte mit meinem Problem keinen Krieg entfalten 😃
    aber ich bedanke mich trotzdem für die Lösungsvorschläge.


Anmelden zum Antworten