Como: Modificar o Sumário de string (guia de programação translation from VPE for Csharp)

Como seqüências de caracteres são imutável, não é possível (sem usar código não seguro) para modificar o valor de um objeto de seqüência de caracteres após ele ter sido criado.No entanto, há várias maneiras de modificar o valor de uma seqüência de caracteres e armazenar o resultado em um novo objeto de seqüência de caracteres.The System.String classe fornece métodos que operam em uma entrada em seqüência e retornam um novo objeto de seqüência de caracteres. Em muitos casos, você pode atribuir o novo objeto à variável mantido a seqüência de caracteres original.The System.Text.RegularExpressions.Regex classe fornece métodos adicionais que funcionam de maneira semelhante. The System.Text.StringBuilderclasse fornece um buffer de caractere que você pode modificar "no local." Chamar o StringBuilder.ToString método para criar um novo objeto de seqüência de caracteres que contém o Sumário corrente do buffer.

Exemplo

O exemplo a seguir mostra várias formas de substituir ou remover substrings de uma seqüência de caracteres especificada.

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;
        }
    }
}

Para acessar os caracteres individuais em uma seqüência de caracteres usando a notação de matriz, você pode usar o StringBuilder objeto, o que sobrecarrega a [] operador para fornecer acesso a seu buffer interno de caractere. Você também pode converter a seqüência de caracteres para uma matriz de caracteres usando o ToCharArray método. O exemplo a seguir utiliza ToCharArray Para criar a matriz. Alguns elementos dessa matriz, em seguida, são modificados.Um construtor de seqüência de caracteres que usa uma matriz char sistema autônomo um parâmetro de entrada, em seguida, é chamada para criar uma nova seqüência de caracteres.

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 
*/

O exemplo a seguir é fornecido para essas situações raras em que pode você deseja modificar um seqüência de caracteres no local usando código não seguro de maneira semelhante a matrizes de caracteres de estilo C.O exemplo mostra como acessar os caracteres individuais "no local" usando a palavra-chave fixed.Ele também demonstra um possível efeito colateral operações sem segurança em seqüências de caracteres resultante da maneira que o compilador translation from VPE for Csharp armazena internamente cadeias de caracteres (estagiários).Em geral, você não deve usar essa técnica, a menos que seja absolutamente necessário.

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();
    }

}

Consulte também

Conceitos

Guia de Programação C#

Referência

Sequências (guia de programação C#)

Date

History

Motivo

Julho de 2008

Alterações extensivas e exemplos de código adicional para melhorar a precisão e integridade.

Correção de bug do conteúdo.