Sztringtartalom módosítása a C-ben#

Tip

Ez a cikk az Alapismeretek szakasz része azon fejlesztők számára, akik már legalább egy programozási nyelvet ismernek, és c#-t tanulnak. Ha még csak most ismerkedik a programozással, először az Első lépések oktatóanyagokkal kezdje.

Más nyelvről jön? A Java és a JavaScripthez hasonlóan a C#-sztringek nem módosíthatók: például ReplaceTrim egy új sztringet adnak vissza az eredeti helyett. Az itt található minták párhuzamos String metódusokat használnak ezekben a nyelvekben.

A C# stringnem módosítható, ami azt jelenti, hogy a tartalma nem változik a létrehozás után. Minden olyan metódus, amely úgy tűnik, hogy módosít egy sztringet, valójában egy újat string ad vissza a módosításokkal, és érintetlenül hagyja az eredetit. A cikkben szereplő példák minden eredményt egy új változóban tárolnak, így a forrás és a módosított érték is látható.

Válassza ki a forgatókönyvnek megfelelő technikát: cserélje le az ismert szöveget, vágja le a szóközt, távolítsa el a karaktertartományt, cserélje le a mintának megfelelő szöveget, vagy szerkessze az egyes karaktereket.

Ismert szöveg cseréje

A String.Replace metódus az egyik sztring minden előfordulását lecseréli egy másikra, és az eredményt egy új sztringként adja vissza:

string source = "The mountains are behind the clouds today.";

// Replace returns a new string; the original is unchanged.
string updated = source.Replace("mountains", "peaks");

Console.WriteLine(source);
// => The mountains are behind the clouds today.
Console.WriteLine(updated);
// => The peaks are behind the clouds today.

Az eredeti sztring változatlan, ami a nem módosíthatóságot mutatja: Replace létrehoz egy új sztringet a helyettesítéssel.

Replace egy olyan túlterheléssel is rendelkezik, amely egyes karaktereket cserél fel. Az alábbi példa minden helyet aláhúzással helyettesít:

string source = "The mountains are behind the clouds today.";

// Replace every occurrence of one character with another.
string updated = source.Replace(' ', '_');

Console.WriteLine(updated);
// => The_mountains_are_behind_the_clouds_today.

Mindkét túlterhelés a sztringben található minden egyezést kicseréli, nem csak az elsőt. Akár egyetlen karaktert, akár egy karakterláncot ad meg, a Replace egyetlen hívással az összes előfordulást lecseréli.

Térköz vágása

A String.Trim, String.TrimStart és String.TrimEnd használatával távolíthatja el az elején vagy a végén lévő üres karaktereket. Minden metódus egy új sztringet ad vissza:

string source = "    I'm wider than I need to be.      ";

// Each method returns a new string with whitespace removed.
Console.WriteLine($"<{source.Trim()}>");
// => <I'm wider than I need to be.>
Console.WriteLine($"<{source.TrimStart()}>");
// => <I'm wider than I need to be.      >
Console.WriteLine($"<{source.TrimEnd()}>");
// => <    I'm wider than I need to be.>

Karaktertartomány eltávolítása

A String.Remove metódus egy indextől kezdődően több karaktert töröl. Kombinálja a következővel String.IndexOf az eltávolítandó szöveg megkereséséhez:

string source = "Many mountains are behind many clouds today.";
string toRemove = "many ";

// Find the text, then remove that span by index and length.
int index = source.IndexOf(toRemove);
string result = index >= 0
    ? source.Remove(index, toRemove.Length)
    : source;

Console.WriteLine(result);
// => Many mountains are behind clouds today.

Mintázatnak megfelelő szöveg cseréje

Ha a pontos sztring helyett egy mintát követő szöveget kell lecserélnie, használjon reguláris kifejezéseket. A Regex.Replace metódus elfogad egy függvényt, amely kiszámítja az egyes csereeket, így megőrizheti az olyan részleteket, mint az eredeti nagybetűsítés. A the\s minta a „the” karaktersorra, amelyet egy üreshely-karakter követ, illeszkedik, ami megakadályozza, hogy a „there” szóra is illeszkedjen:

string source = "The mountains are still there behind the clouds today.";

// Replace "the" or "The" followed by whitespace, preserving the original case.
// The \s in the pattern keeps "there" from matching.
string result = Regex.Replace(
    source,
    """the\s""",
    match => char.IsUpper(match.Value[0]) ? "Many " : "many ",
    RegexOptions.IgnoreCase);

Console.WriteLine(result);
// => Many mountains are still there behind many clouds today.

Ha mintaalapú keresést szeretne végezni csere helyett, lásd: Sztringek keresése a C#-ban. A reguláris kifejezés szintaxisát a Reguláris kifejezésnyelv rövid útmutatója ismerteti.

Egyéni karakterek módosítása

Ha pozíció szerint szeretné módosítani a karaktereket, másolja a sztringet egy Span<T> karakterbe, módosítsa a span értékét, majd hozzon létre belőle egy új sztringet. Az alábbi példa megkeresi a "róka" szót, és lecseréli a "macska" kifejezésre:

string phrase = "The quick brown fox jumps over the fence.";

// A string is immutable, so copy it into a Span<char> to edit in place.
Span<char> characters = stackalloc char[phrase.Length];
phrase.CopyTo(characters);
int index = phrase.IndexOf("fox");
if (index != -1)
{
    characters[index] = 'c';
    characters[index + 1] = 'a';
    characters[index + 2] = 't';
}

// Build a new string from the modified characters.
string updated = new string(characters);
Console.WriteLine(updated);
// => The quick brown cat jumps over the fence.

A köztes foglalásokat elkerülő nagy teljesítményű forgatókönyvek esetében a futtatókörnyezet alacsonyabb szintű API-kat biztosít, például String.Create. Ezek a technikák fejlettek; a mindennapi kódok esetében a cikkben szereplő módszerek a megfelelő választás.

Lásd még