webentwicklung-frage-antwort-db.com.de

Wie entferne ich alle Leerzeichen aus einem String?

Sehr geehrte Programmierer,

Ich programmiere etwas in C # Visual Studio 2013 und habe gerade erkannt, dass ich Trim() nicht verwenden muss, wenn ich Replace(" ", string.Empty) verwende.

Ein Beispiel folgt:

SanitizedString = RawString
    .Replace("/", string.Empty)
    .Replace("\\", string.Empty)
    .Replace(" ", string.Empty)
    .Trim();

Da ich diesen Code zuvor anders strukturiert hatte, habe ich ihn nicht bemerkt:

SanitizedString = RawString.Trim()
    .Replace("/", string.Empty)
    .Replace("\\", string.Empty)
    .Replace(" ", string.Empty);

Mir ist bekannt, dass diese Methoden anders funktionieren, da Trim() alle Leerzeichen entfernt, während Replace(" ", string.Empty) nur Leerzeichen entfernt.

Deshalb habe ich eine andere Frage.

Ich sehe keinen offensichtlichen Weg, dies mit Replace zu erreichen. Meine Frage ist, wie würde ich vorgehen, wenn ich alle Leerzeichen aus der Zeichenfolge entfernen möchte?

Ich habe folgendes gefunden:

Effiziente Möglichkeit, ALLE Leerzeichen aus String zu entfernen?

Aber da ich noch nie reguläre Ausdrücke verwendet habe, zögere ich, wie ich ihn auf String anwenden kann.

7
Vlastimil

Verwenden Sie Linq , um Leerzeichen herauszufiltern:

  using System.Linq;

  ... 

  string source = "abc    \t def\r\n789";
  string result = string.Concat(source.Where(c => !char.IsWhiteSpace(c)));

  Console.WriteLine(result);

Ergebnis:

abcdef789
14
Dmitry Bychenko

Eine Möglichkeit ist, Regex zu verwenden

public static string ReplaceAllWhiteSpaces(string str) {
  return Regex.Replace(str, @"\s+", String.Empty);
}

Entnommen aus: https://codereview.stackexchange.com/questions/64935/replace-each-each-whitespace-in-a-string-with-20

Die Antwort auf diese Frage ist nicht so einfach, wie es scheint. Das Problem besteht nicht darin, den Ersatz tatsächlich zu kodieren, sondern zu definieren, was ein Leerraum ist.

In diesem Wikipedia-Artikel sind beispielsweise Dutzende von Zeichen (Unicode-Codepunkte) aufgeführt, die das Unicode-Attribut WSpace sowie viele verwandte Zeichen enthalten, die von den meisten Benutzern als Leerzeichen betrachtet werden, die jedoch nicht das WSpace-Attribut haben.

In Anbetracht dessen würde ich mich niemals auf das verlassen, was einige Regex-Parser für \s halten, da dies eigentlich nicht standardisiert ist. Ich bin mir ziemlich sicher, dass der Regex-Parser von C # Codepunkte wie U+2001 nicht als Leerzeichen behandelt, sodass sie nicht aus Ihrer Zeichenfolge entfernt werden.

Dies kann ein Problem für Ihre Anwendung sein oder nicht; Es hängt davon ab, wie die zu behandelnden Strings überhaupt gefiltert werden. Wenn Sie jedoch Zeichenfolgen in Fremdsprachen behandeln (dh Zeichenfolgen, die Zeichen außerhalb des Bereichs ASCII enthalten), müssen Sie darüber nachdenken.

Bedenken Sie dabei, dass Regex langsam ist. Wenn Sie ohnehin Ihre eigenen Ersetzungen definieren müssen (aus den oben genannten Gründen), sollten Sie eine leichtere Ersetzungsfunktion verwenden (wenn C # oder seine Assemblys eine enthalten - ich verwende C # nicht, daher weiß ich es nicht).

2
Binarus

Übergeben Sie die Zeichenfolge einfach bei Method Calling. Die Zeichenfolge wird ohne Leerzeichen zurückgegeben.

 public static string RemoveSpaces(this String Value)
    {
        RegexOptions options = RegexOptions.None;
        Regex regex = new Regex(@"[ ]{2,}", options);
        return regex.Replace(Value.Trim(), @" ");
    }
1
Veer Jangid

Für jeden, der auf diese Seite kommt, gibt es einen hervorragenden CodeProject-Artikel, in dem der Autor verschiedene Lösungen für dieses Problem anführt. Die schnellste vollständig verwaltete Lösung, die er auf den Markt brachte, ist (im Wesentlichen) folgende:

public static string RemoveAllWhitespace(string str) {
    var len = str.Length;
    var src = str.ToCharArray();
    var dstIdx = 0;
    for (var i = 0; i < len; i++) {
        var ch = src[i];
        switch (ch) {
            case '\u0020': case '\u00A0': case '\u1680': case '\u2000': case '\u2001':
            case '\u2002': case '\u2003': case '\u2004': case '\u2005': case '\u2006':
            case '\u2007': case '\u2008': case '\u2009': case '\u200A': case '\u202F':
            case '\u205F': case '\u3000': case '\u2028': case '\u2029': case '\u0009':
            case '\u000A': case '\u000B': case '\u000C': case '\u000D': case '\u0085':
                break;
            default:
                src[dstIdx++] = ch;
                break;
        }
    }
    return new string(src, 0, dstIdx);
}

Es gibt natürlich viele Vorbehalte und potenzielle Meinungsverschiedenheiten bezüglich des richtigen Satzes von Whitespace-Zeichen, aber die grundlegenden Informationen sind ziemlich nützlich (wie RegEx bei weitem am langsamsten war).

Ganzer Artikel hier: https://www.codeproject.com/Articles/1014073/Schnellste-Methode-zurEntfernung aller Whitespace-vonStrin

Hinweis: Ich habe keine Zugehörigkeit zum Autor oder zu CodeProject. Ich habe diesen Artikel gerade über eine normale Websuche gefunden.

1
Dave Parker
   string Abcd = Console.ReadLine();
        string wspace = "";
                    int len = Abcd.Length;
        for (int i = 0; i <= len-1; i++)
        {
            if (Abcd[i] != ' ')
            {
                wspace = wspace + Abcd[i];
            }

        }
        Console.WriteLine("The Sring Without Space Is= '"+wspace+"'");
        Console.ReadLine();
0

Das könnte nützlich sein:

string message = Console.ReadLine().Trim().ToLower();

string message_without_space = message.Split(' ').Aggregate((a, b) => a + b).ToString();
0
hnk dln