Aracılığıyla paylaş


Nasıl yapılır: (C# Programlama Kılavuzu) dize içeriği değiştirme

Dizeler, çünkü Immutable, (güvensiz kod kullanmadan) mümkün değil değeri bir string nesnesi oluşturulduktan sonra değişiklik yapmak için.Ancak, bir dize değerini değiştirin ve sonucu yeni bir string nesnesinde depolamak için birçok yol vardır.System.String SAX giriş çalışması yöntemleri dize ve yeni bir dize nesnesini döndürür.Çoğu durumda, yeni nesne özgün dize tutulan değişkene atayabilirsiniz.System.Text.RegularExpressions.Regex Sınıfı, benzer bir şekilde çalışmak ek yöntemler sağlar.System.Text.StringBuilder SAX değiştirebileceğiniz bir karakter arabelleği "yerinde." Sizi StringBuilder.ToString arabellek geçerli içeriğini içeren yeni bir string nesnesi oluşturma yöntemi.

Örnek

Aşağıdaki örnek, değiştirmek veya belirtilen bir dizenin alt dizeleri kaldırmak için çeşitli yollar gösterir.

class ReplaceSubstrings
{
    string searchFor;
    string replaceWith;

    static void Main(string[] args)
    {

        ReplaceSubstrings app = new ReplaceSubstrings();
        string s = "The mountains are behind the clouds today.";

        // Replace one substring with another with String.Replace.
        // Only exact matches are supported.
        s = s.Replace("mountains", "peaks");
        Console.WriteLine(s);
        // Output: The peaks are behind the clouds today.

        // Use Regex.Replace for more flexibility. 
        // Replace "the" or "The" with "many" or "Many".
        // using System.Text.RegularExpressions
        app.searchFor = "the"; // A very simple regular expression.
        app.replaceWith = "many";
        s = Regex.Replace(s, app.searchFor, app.ReplaceMatchCase, RegexOptions.IgnoreCase);
        Console.WriteLine(s);
        // Output: Many peaks are behind many clouds today.

        // Replace all occurrences of one char with another.
        s = s.Replace(' ', '_');
        Console.WriteLine(s);
        // Output: Many_peaks_are_behind_many_clouds_today.

        // Remove a substring from the middle of the string.
        string temp = "many_";
        int i = s.IndexOf(temp);
        if (i >= 0)
        {
            s = s.Remove(i, temp.Length);
        }
        Console.WriteLine(s);
        // Output: Many_peaks_are_behind_clouds_today.

        // Remove trailing and leading whitespace.
        // See also the TrimStart and TrimEnd methods.
        string s2 = "    I'm wider than I need to be.      ";
        // Store the results in a new string variable.
        temp = s2.Trim();
        Console.WriteLine(temp);
        // Output: I'm wider than I need to be.

        // Keep the console window open in debug mode.
        Console.WriteLine("Press any key to exit");
        Console.ReadKey();
    }

    // Custom match method called by Regex.Replace
    // using System.Text.RegularExpressions
    string ReplaceMatchCase(Match m)
    {
        // Test whether the match is capitalized
        if (Char.IsUpper(m.Value[0]) == true)
        {
            // Capitalize the replacement string
            // using System.Text;
            StringBuilder sb = new StringBuilder(replaceWith);
            sb[0] = (Char.ToUpper(sb[0]));
            return sb.ToString();
        }
        else
        {
            return replaceWith;
        }
    }
}

Bir dizedeki karakterleri tek tek dizi gösterim biçimini kullanarak erişmek için kullanabileceğiniz StringBuilder overloads nesne [] kendi iç karakter arabelleği erişim sağlamak için işleci.Kullanarak bir dizi karakter dizesi dönüştürebilirsiniz ToCharArray yöntemi.Aşağıdaki örnek ToCharArray bir dizi oluşturmak için.Bu dizinin bazı öğeleri daha sonra değiştirilebilir.Bir dize alır bir girdi parametresi olarak bir karakter dizisi sonra yeni bir dize oluşturacak şekilde çağrıldığından kurucusu.

class ModifyStrings
{
    static void Main()
    {
        string str = "The quick brown fox jumped over the fence";
        System.Console.WriteLine(str);

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

        string str2 = new string(chars);
        System.Console.WriteLine(str2);

        // Keep the console window open in debug mode
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
/* Output:
  The quick brown fox jumped over the fence
  The quick brown cat jumped over the fence 
*/

Aşağıdaki örnek, c stilinde char dizileri için benzer bir şekilde, güvenli olmayan kod kullanarak bir dize yerinde değiştirmek isteyebilirsiniz bu çok nadir durumlar için sağlanmıştır.Örnek tek tek karakterleri "yerinde" fixed anahtar sözcüğünü kullanarak ReportOrders.Ayrıca, olası yan, C# derleyicisi (stajyer) dizeleri dahili olarak saklar biçimi nedeniyle oluşur etkilerinden biri dizeler güvenli olmayan işlemlere gösterilmektedir.Genel olarak, kesinlikle gerekli olmadığı sürece bu tekniği kullanmamalısınız.

class UnsafeString
{
    unsafe static void Main(string[] args)
    {
        // Compiler will store (intern) 
        // these strings in same location.
        string s1 = "Hello";
        string s2 = "Hello";

        // Change one string using unsafe code.
        fixed (char* p = s1)
        {
            p[0] = 'C';
        }

        //  Both strings have changed.
        Console.WriteLine(s1);
        Console.WriteLine(s2);

        // Keep console window open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }

}

Ayrıca bkz.

Kavramlar

C# Programlama Kılavuzu

Diğer Kaynaklar

Dizeleri (C# Programlama Kılavuzu)