Bestimmte Zeichen aus string entfernen



  • Hallo,

    ich lese eine Textdatei ein und bekomme in jeder Zeile u.a. einen Zahlenwert und nur der interessiert mich. Jetzt möchte ich alles andere, das in dieser Zeile steht entfernen.
    Dazu nutze ich die Trim-Methode:

    char[] szTrim = {'p', 'r', 'o', 'c', 'e', 's', ' ', ':'};
    string Output = s.Trim(szTrim);
    

    Angenommen ich wüsste nicht, welche Zeichen in der Zeile stehen können, gibt es eine Methode die umgekehrt funktioniert? Also in der man nur die Zeichen angibt, die NICHT entfernt werden sollen? Quasi ein "ExceptTrim"...

    Danke für eure Hilfe!



  • Ja, das geht über die ASCII-Werte der einzelnen Zeichen:

    private void ZiffernAusString()
            {
                string value = "abc123456789";
                string text = value + "\n\n";
                int    ichar;
    
                // Wandle string in char-array
                char[] array = value.ToCharArray();
    
                // Schleife über alle Zeichen im char-array
                for (int i = 0; i < array.Length; i++)
                {
                    char letter = array[i];
                    ichar = (int)letter;
                    if((ichar > 48) & (ichar < 58)) // nur die Ziffern 0 ... 9
                       text += letter + "      " + ichar.ToString() + "\n";
                }
                MessageBox.Show(text);
            }
    


  • Danke aber soweit war ich auch schon. Dachte vielleicht gibt es dafür auch was fertiges...



  • Hi,

    das einfachste ist wahrscheinlich einen RegEx zu benutzen: https://msdn.microsoft.com/en-us/library/hs600312%28v=vs.110%29.aspx.
    Mit \d+ solltest du weiter kommen.

    Viele Grüße
    KaPtainCugel



  • Je nachdem was genau die Ansprüche sind:

    static string ExceptTrim(string input, string charsToKeep)
            {
                //Echtes trim
                return String.Concat(input.SkipWhile(c => !charsToKeep.Contains(c))
                    .Reverse().SkipWhile(c => !charsToKeep.Contains(c)).Reverse());
    
                //Entfernt einfach alle Zeichen die nicht in "charsToKeep" sind aus dem string
                return String.Concat(input.Where(c => charsToKeep.Contains(c)));
            }
    
    string test = ExceptTrim("test1234test44test", "0123456789");
    

Anmelden zum Antworten