Megosztás a következőn keresztül:


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

Ez a cikk számos technikát mutat be egy string meglévő stringmódosításával. Az összes bemutatott technika a módosítások eredményét adja vissza új string objektumként. Annak bemutatásához, hogy az eredeti és a módosított sztringek különálló példányok, a példák egy új változóban tárolják az eredményt. Az egyes példák futtatásakor megvizsgálhatja az eredetit string és az újat.string

Feljegyzés

A cikkben szereplő C#-példák a Try.NET beágyazott kódfuttatóban és játszótéren futnak. Kattintson a Futtatás gombra egy példa interaktív ablakban való futtatásához. Miután végrehajtotta a kódot, módosíthatja és futtathatja a módosított kódot a Futtatás gombra kattintva. A módosított kód vagy az interaktív ablakban fut, vagy ha a fordítás sikertelen, az interaktív ablakban megjelenik az összes C#-fordító hibaüzenet.

Ebben a cikkben számos technikát mutatunk be. A meglévő szöveget lecserélheti. Kereshet mintákat, és lecserélheti az egyező szöveget más szöveggel. A sztringek karaktersorozatként is kezelhetők. Olyan kényelmi módszereket is használhat, amelyek eltávolítják a szabad területet. Válassza ki a forgatókönyvnek leginkább megfelelő technikákat.

Szöveg cseréje

Az alábbi kód egy új sztringet hoz létre a meglévő szöveg helyettesítésével.

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

// Replace one substring with another with String.Replace.
// Only exact matches are supported.
var replacement = source.Replace("mountains", "peaks");
Console.WriteLine($"The source string is <{source}>");
Console.WriteLine($"The updated string is <{replacement}>");

Az előző kód a sztringek nem módosítható tulajdonságát mutatja be. Az előző példában látható, sourcehogy az eredeti sztring nem módosult. A String.Replace metódus létrehoz egy újat string , amely tartalmazza a módosításokat.

A Replace metódus sztringeket vagy egyetlen karaktert is lecserélhet. Mindkét esetben a keresett szöveg minden előfordulását lecserélik. Az alábbi példa az összes ' karaktert '_' karakterre cseréli:

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

// Replace all occurrences of one char with another.
var replacement = source.Replace(' ', '_');
Console.WriteLine(source);
Console.WriteLine(replacement);

A forrássztring változatlan, és a rendszer egy új sztringet ad vissza a csere során.

Szabad terület vágása

A , String.TrimStartés String.TrimEnd a String.Trimmetódusok használatával eltávolíthat minden kezdő vagy záró szóközt. Az alábbi kód mindegyikre mutat példát. A forrássztring nem változik; ezek a metódusok egy új sztringet adnak vissza a módosított tartalommal.

// Remove trailing and leading white space.
string source = "    I'm wider than I need to be.      ";
// Store the results in a new string variable.
var trimmedResult = source.Trim();
var trimLeading = source.TrimStart();
var trimTrailing = source.TrimEnd();
Console.WriteLine($"<{source}>");
Console.WriteLine($"<{trimmedResult}>");
Console.WriteLine($"<{trimLeading}>");
Console.WriteLine($"<{trimTrailing}>");

Szöveg eltávolítása

A metódussal szöveget távolíthat el egy String.Remove sztringből. Ez a metódus egy adott indextől kezdődően több karaktert távolít el. Az alábbi példa bemutatja, hogyan távolíthat String.IndexOfRemove el szöveget egy sztringből:

string source = "Many mountains are behind many clouds today.";
// Remove a substring from the middle of the string.
string toRemove = "many ";
string result = string.Empty;
int i = source.IndexOf(toRemove);
if (i >= 0)
{
    result= source.Remove(i, toRemove.Length);
}
Console.WriteLine(source);
Console.WriteLine(result);

Egyező minták cseréje

A reguláris kifejezések használatával lecserélheti a szövegmegfeleltetési mintákat egy új szövegre, amelyet esetleg egy minta határoz meg. Az alábbi példa az System.Text.RegularExpressions.Regex osztály használatával keres mintát egy forrássztringben, és lecseréli a megfelelő nagybetűsítésre. A Regex.Replace(String, String, MatchEvaluator, RegexOptions) metódus egy függvényt használ, amely a csere logikáját adja meg argumentumként. Ebben a példában ez a függvény LocalReplaceMatchCase a mintametódusban deklarált helyi függvény . LocalReplaceMatchCase az osztály használatával System.Text.StringBuilder hozza létre a helyettesítő sztringet a megfelelő nagybetűsítéssel.

A reguláris kifejezések az ismert szöveg helyett a mintát követő szövegek kereséséhez és cseréjéhez hasznosak. További információ: Sztringek keresése. A "the\s" keresési minta a "the" szót, majd egy szóköz karaktert keres. A minta ezen része biztosítja, hogy az ne egyezzen meg a forrássztring "ott" értékével. A reguláris kifejezés nyelvi elemeivel kapcsolatos további információkért tekintse meg a Reguláris kifejezés nyelve – gyorshivatkozás című témakört.

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

// Use Regex.Replace for more flexibility.
// Replace "the" or "The" with "many" or "Many".
// using System.Text.RegularExpressions
string replaceWith = "many ";
source = System.Text.RegularExpressions.Regex.Replace(source, "the\\s", LocalReplaceMatchCase,
    System.Text.RegularExpressions.RegexOptions.IgnoreCase);
Console.WriteLine(source);

string LocalReplaceMatchCase(System.Text.RegularExpressions.Match matchExpression)
{
    // Test whether the match is capitalized
    if (Char.IsUpper(matchExpression.Value[0]))
    {
        // Capitalize the replacement string
        System.Text.StringBuilder replacementBuilder = new System.Text.StringBuilder(replaceWith);
        replacementBuilder[0] = Char.ToUpper(replacementBuilder[0]);
        return replacementBuilder.ToString();
    }
    else
    {
        return replaceWith;
    }
}

A StringBuilder.ToString metódus egy nem módosítható sztringet ad vissza az StringBuilder objektum tartalmával.

Egyéni karakterek módosítása

Létrehozhat egy karaktertömböt egy sztringből, módosíthatja a tömb tartalmát, majd létrehozhat egy új sztringet a tömb módosított tartalmából.

Az alábbi példa bemutatja, hogyan cserélhet le karakterkészletet egy sztringben. Először a metódus használatával String.ToCharArray() hoz létre egy karaktertömböt. IndexOf A módszerrel megkeresi a "róka" szó kezdő indexét. A következő három karaktert egy másik szó váltja fel. Végül egy új sztring jön létre a frissített karaktertömbből.

string phrase = "The quick brown fox jumps over the fence";
Console.WriteLine(phrase);

char[] phraseAsChars = phrase.ToCharArray();
int animalIndex = phrase.IndexOf("fox");
if (animalIndex != -1)
{
    phraseAsChars[animalIndex++] = 'c';
    phraseAsChars[animalIndex++] = 'a';
    phraseAsChars[animalIndex] = 't';
}

string updatedPhrase = new string(phraseAsChars);
Console.WriteLine(updatedPhrase);

Sztringtartalom programozott összeállítása

Mivel a sztringek nem módosíthatók, az előző példák mind ideiglenes sztringeket vagy karaktertömböket hoznak létre. Nagy teljesítményű forgatókönyvekben célszerű lehet elkerülni ezeket a halomfoglalásokat. A .NET Core egy olyan metódust String.Create biztosít, amellyel programozott módon kitöltheti egy sztring karaktertartalmát egy visszahívással, elkerülve ezzel a köztes ideiglenes sztringfoglalásokat.

// constructing a string from a char array, prefix it with some additional characters
char[] chars = { 'a', 'b', 'c', 'd', '\0' };
int length = chars.Length + 2;
string result = string.Create(length, chars, (Span<char> strContent, char[] charArray) =>
{
    strContent[0] = '0';
    strContent[1] = '1';
    for (int i = 0; i < charArray.Length; i++)
    {
        strContent[i + 2] = charArray[i];
    }
});

Console.WriteLine(result);

Egy rögzített blokkban módosíthat egy sztringet, amely nem biztonságos kóddal rendelkezik, de a sztring létrehozása után erősen nem ajánlott módosítani a sztring tartalmát. Ha így tesz, az kiszámíthatatlan módon töri meg a dolgokat. Ha például valaki olyan sztringet internál, amely ugyanazzal a tartalommal rendelkezik, mint a sajátja, akkor megkapja a másolatot, és nem számít arra, hogy módosítja a sztringet.

Lásd még