Kurse:Datentypen-C-Sharp String-Operationen und wichtige Methoden: Unterschied zwischen den Versionen

Aus ahrensburg.city
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „== Grundlagen == ; Deklaration <syntaxhighlight lang="csharp"> string name = "Alice"; string leer = string.Empty; </syntaxhighlight> ; Verkettung <syntaxhighlight lang="csharp"> string full = vorname + " " + nachname; string interp = $"{vorname} {nachname}"; var builder = new StringBuilder().Append(vorname).Append(' ').Append(nachname).ToString(); </syntaxhighlight> == Häufig genutzte Eigenschaften == * Length – Anzahl der UTF-16 Codeeinheiten (nicht…“
 
// via Wikitext Extension for VSCode
 
Zeile 1: Zeile 1:
== Grundlagen ==
Hier ist die Übersicht, sortiert von Anfänger bis Profi, jeweils mit Beispielcode und Merkzettel:
; Deklaration
 
== Anfänger ==
; Deklaration & Verkettung
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
string name = "Alice";
string name = "Alice";
string leer = string.Empty;
</syntaxhighlight>
; Verkettung
<syntaxhighlight lang="csharp">
string full = vorname + " " + nachname;
string full = vorname + " " + nachname;
string interp = $"{vorname} {nachname}";
var builder = new StringBuilder().Append(vorname).Append(' ').Append(nachname).ToString();
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: Strings sind Zeichenketten. Verkettung mit +.


== Häufig genutzte Eigenschaften ==
; Eigenschaften & Vergleich
* Length – Anzahl der UTF-16 Codeeinheiten (nicht zwingend Benutzer-grafeme)
 
== Vergleich ==
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
string.Equals(a, b);                     // Ordinal, case-sensitiv
int len = str.Length;
string.Equals(a, b, StringComparison.OrdinalIgnoreCase);
bool gleich = str == "abc";
a.Equals(b, StringComparison.Ordinal);
a == b;                                  // Wertvergleich
string.Compare(a, b, StringComparison.Ordinal);
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: .Length gibt die Länge. == vergleicht Werte.


== Suchen ==
; Suchen & Extrahieren
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
str.Contains("abc", StringComparison.Ordinal);
bool hat = str.Contains("abc");
str.StartsWith("pre", StringComparison.OrdinalIgnoreCase);
char c = str[0];
str.EndsWith("suf", StringComparison.Ordinal);
string teil = str.Substring(2, 3);
str.IndexOf("x", StringComparison.Ordinal);
str.LastIndexOf('.');
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: .Contains prüft auf Teilstring, [i] für Zeichen, Substring für Ausschnitt.


== Extrahieren ==
; Aufteilen & Zusammenfügen
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
str.Substring(startIndex);
var parts = str.Split(',');
str.Substring(startIndex, length);
str[startIndex];        // einzelnes char
</syntaxhighlight>
 
== Teilstrings moderner (Span-Slicing) ==
<syntaxhighlight lang="csharp">
ReadOnlySpan<char> span = str.AsSpan();
var teil = span.Slice(5, 3); // vermeidet Kopie
</syntaxhighlight>
 
== Aufteilen & Zusammenfügen ==
<syntaxhighlight lang="csharp">
var parts = str.Split('.', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
string joined = string.Join(";", parts);
string joined = string.Join(";", parts);
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: Split teilt, Join verbindet.


== Trimmen ==
; Trimmen & Ersetzen
<syntaxhighlight lang="csharp">
str.Trim();      // Whitespace
str.TrimStart();
str.TrimEnd();
str.Trim('0');  // spezifische Zeichen
</syntaxhighlight>
 
== Ersetzen ==
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
str.Trim();
str.Replace("alt", "neu");
str.Replace("alt", "neu");
str.Replace('a', 'b');
Regex.Replace(str, "[0-9]+", "#");
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: Trim entfernt Leerzeichen, Replace ersetzt Text.


== Formatierung ==
== Fortgeschritten ==
; Formatierung & Groß/Kleinschreibung
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
string.Format("Wert: {0:N2}", value);
string s = $"Wert: {value:N2}";
$"Wert: {value:N2}";
str.ToUpperInvariant();
value.ToString("N2", CultureInfo.InvariantCulture);
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: $"" für Interpolation, ToUpper/ToLower für Umwandlung.


== Groß/Kleinschreibung ==
; Einfügen & Entfernen & Pad
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
str.ToUpperInvariant();
str.Insert(2, "X");
str.ToLower(CultureInfo.CurrentCulture);
str.Remove(1, 2);
"42".PadLeft(5, '0');
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: Insert/Remove ändern Text, PadLeft/Right füllt auf.


== Einfügen & Entfernen ==
; Zeichenprüfung
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
str.Insert(index, "XYZ");
char.IsLetterOrDigit(ch);
str.Remove(startIndex);
str.Remove(startIndex, count);
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: Prüft Zeichen auf Buchstabe/Ziffer.


== Pad (Auffüllen) ==
; Null/Empty/WhiteSpace
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
"42".PadLeft(5, '0');   // 00042
string.IsNullOrEmpty(str);
"42".PadRight(5, '.'); // 42...
string.IsNullOrWhiteSpace(str);
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: Prüft auf leere oder nur Leerzeichen.


== Zeichenprüfung ==
== Profi ==
; StringBuilder (für viele Änderungen)
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
char.IsLetterOrDigit(ch);
var sb = new StringBuilder().Append("A").Append("B");
char.IsWhiteSpace(ch);
string result = sb.ToString();
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: StringBuilder für viele Verkettungen.


== Immutable Hinweis ==
; Span-Slicing & Split (Performance)
Strings sind unveränderlich. Viele Operationen erzeugen neue Instanzen. Für viele Verkettungen: StringBuilder.
 
== StringBuilder ==
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
var sb = new StringBuilder(capacity:256)
var teil = str.AsSpan().Slice(2, 3);
    .Append("Zeile ").AppendLine("1")
    .AppendFormat("Wert={0}", 123);
string result = sb.ToString();
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: AsSpan/Slice für schnelle Teilstrings.


== Sicherheitsrelevante Vergleiche ==
; Sicherheitsrelevanter Vergleich
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
CryptographicOperations.FixedTimeEquals(
CryptographicOperations.FixedTimeEquals(
Zeile 117: Zeile 87:
     MemoryMarshal.AsBytes(eingabe.AsSpan()));
     MemoryMarshal.AsBytes(eingabe.AsSpan()));
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: FixedTimeEquals für sichere Vergleiche.


== Null / Empty / WhiteSpace ==
; Interpolated String Handler
<syntaxhighlight lang="csharp">
string.IsNullOrEmpty(str);
string.IsNullOrWhiteSpace(str);
</syntaxhighlight>
 
== Interpolated String Handler (Performance) ==
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
[InterpolatedStringHandler]
[InterpolatedStringHandler]
public ref struct LogHandler {
public ref struct LogHandler { }
    // eigener Handler für Logging
}
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: Eigene Handler für Logging/Performance.


== Raw String Literals (C# 11) ==
; Raw String Literals (C# 11)
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
string json = """
string json = """
Zeile 141: Zeile 105:
""";
""";
</syntaxhighlight>
</syntaxhighlight>
* Merkzettel: Mehrzeilige Strings mit """.


== Escapes ==
; Escapes & Normalisierung
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
string pfad = @"C:\Temp\log.txt";
string pfad = @"C:\Temp\log.txt";
string zeile = "Text\nNeue Zeile\tTab";
</syntaxhighlight>
== Normalisierung (Unicode) ==
<syntaxhighlight lang="csharp">
string norm = str.Normalize(NormalizationForm.FormC);
string norm = str.Normalize(NormalizationForm.FormC);
</syntaxhighlight>
</syntaxhighlight>
 
* Merkzettel: @ für Pfade, Normalize für Unicode.
== Split vs Span ==
Für Hochleistung: str.AsSpan().Split(...) (ab .NET 8: MemoryExtensions.Split)


== Zusammenfassung ==
== Zusammenfassung ==
Kurzliste: Length, Indexer, Substring, Contains, StartsWith, EndsWith, IndexOf, Split, Join, Trim*, Replace, Insert, Remove, PadLeft/Right, ToUpper*/ToLower*, Format/$-Interpolation, Equals/Compare, Normalize, StringBuilder.
Kurzliste Anfänger: Deklaration, Verkettung, Eigenschaften, Vergleich, Suchen, Extrahieren, Split, Join, Trim, Replace
Kurzliste Fortgeschritten: Formatierung, Groß/Klein, Insert, Remove, Pad, Zeichenprüfung, Null/Empty 
Kurzliste Profi: StringBuilder, Span, Sicherheitsvergleich, Interpolated Handler, Raw Literals, Escapes, Normalisierung

Aktuelle Version vom 1. September 2025, 23:58 Uhr

Hier ist die Übersicht, sortiert von Anfänger bis Profi, jeweils mit Beispielcode und Merkzettel:

Anfänger

Deklaration & Verkettung
string name = "Alice";
string full = vorname + " " + nachname;
  • Merkzettel: Strings sind Zeichenketten. Verkettung mit +.
Eigenschaften & Vergleich
int len = str.Length;
bool gleich = str == "abc";
  • Merkzettel: .Length gibt die Länge. == vergleicht Werte.
Suchen & Extrahieren
bool hat = str.Contains("abc");
char c = str[0];
string teil = str.Substring(2, 3);
  • Merkzettel: .Contains prüft auf Teilstring, [i] für Zeichen, Substring für Ausschnitt.
Aufteilen & Zusammenfügen
var parts = str.Split(',');
string joined = string.Join(";", parts);
  • Merkzettel: Split teilt, Join verbindet.
Trimmen & Ersetzen
str.Trim();
str.Replace("alt", "neu");
  • Merkzettel: Trim entfernt Leerzeichen, Replace ersetzt Text.

Fortgeschritten

Formatierung & Groß/Kleinschreibung
string s = $"Wert: {value:N2}";
str.ToUpperInvariant();
  • Merkzettel: $"" für Interpolation, ToUpper/ToLower für Umwandlung.
Einfügen & Entfernen & Pad
str.Insert(2, "X");
str.Remove(1, 2);
"42".PadLeft(5, '0');
  • Merkzettel: Insert/Remove ändern Text, PadLeft/Right füllt auf.
Zeichenprüfung
char.IsLetterOrDigit(ch);
  • Merkzettel: Prüft Zeichen auf Buchstabe/Ziffer.
Null/Empty/WhiteSpace
string.IsNullOrEmpty(str);
string.IsNullOrWhiteSpace(str);
  • Merkzettel: Prüft auf leere oder nur Leerzeichen.

Profi

StringBuilder (für viele Änderungen)
var sb = new StringBuilder().Append("A").Append("B");
string result = sb.ToString();
  • Merkzettel: StringBuilder für viele Verkettungen.
Span-Slicing & Split (Performance)
var teil = str.AsSpan().Slice(2, 3);
  • Merkzettel: AsSpan/Slice für schnelle Teilstrings.
Sicherheitsrelevanter Vergleich
CryptographicOperations.FixedTimeEquals(
    MemoryMarshal.AsBytes("secret"u8),
    MemoryMarshal.AsBytes(eingabe.AsSpan()));
  • Merkzettel: FixedTimeEquals für sichere Vergleiche.
Interpolated String Handler
[InterpolatedStringHandler]
public ref struct LogHandler { }
  • Merkzettel: Eigene Handler für Logging/Performance.
Raw String Literals (C# 11)
string json = """
{
  "id": 1,
  "name": "Alice"
}
""";
  • Merkzettel: Mehrzeilige Strings mit """.
Escapes & Normalisierung
string pfad = @"C:\Temp\log.txt";
string norm = str.Normalize(NormalizationForm.FormC);
  • Merkzettel: @ für Pfade, Normalize für Unicode.

Zusammenfassung

Kurzliste Anfänger: Deklaration, Verkettung, Eigenschaften, Vergleich, Suchen, Extrahieren, Split, Join, Trim, Replace Kurzliste Fortgeschritten: Formatierung, Groß/Klein, Insert, Remove, Pad, Zeichenprüfung, Null/Empty Kurzliste Profi: StringBuilder, Span, Sicherheitsvergleich, Interpolated Handler, Raw Literals, Escapes, Normalisierung