Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.