Partilhar via


Sequências

Uma seqüência de caracteres translation from VPE for Csharp é um agrupar de um ou mais caracteres declarado usando a seqüência de caracteres palavra-de chave, que é um atalho do linguagem translation from VPE for Csharp o System.String classe. Seqüências de caractere em translation from VPE for Csharp são muito mais fácil de usar e muito menos propenso a erros de programação que matrizes de caractere em C ou C++.

Uma seqüência de caracteres literal é declarada usando aspas, sistema autônomo mostrado no exemplo a seguir:

string greeting = "Hello, World!";

Você pode extrair substrings e concatenar cadeias de caracteres, como este:

string s1 = "A string is more ";
string s2 = "than the sum of its chars.";

// Concatenate s1 and s2. This actually creates a new
// string object and stores it in s1, releasing the
// reference to the original object.
s1 += s2;

System.Console.WriteLine(s1);
// Output: A string is more than the sum of its chars.

Objetos String são imutáveis que eles não podem ser alterados por uma vez criado.Métodos que atuam em seqüências de caracteres realmente retornam novos objetos de cadeia de caracteres.Portanto, para desempenho resistema autônomoons, grandes quantidades de concatenação ou Outros manipulação de seqüência envolvidos devem ser executadas com o StringBuilder CLsistema autônomos, sistema autônomo demonstrado nos exemplos de código abaixo.

Trabalhar com strings

Caracteres de escape

Caracteres de escape sistema autônomo "\n" (nova linha) e "\t" (guia) podem ser incluídos em seqüências de caracteres.A linha:

string columns = "Column 1\tColumn 2\tColumn 3";
//Output: Column 1        Column 2        Column 3

string rows = "Row 1\r\nRow 2\r\nRow 3";
/* Output:
  Row 1
  Row 2
  Row 3
*/

string title = "\"The \u00C6olean Harp\", by Samuel Taylor Coleridge";
//Output: "The Æolean Harp", by Samuel Taylor Coleridge

é o mesmo sistema autônomo:

Hello

World!

Se você quiser incluir uma barra / invertida, deve ser precedido com outra barra / invertida.A seguinte seqüência:

         string filePath = @"C:\Users\scoleridge\Documents\";
         //Output: C:\Users\scoleridge\Documents\

         string text = @"My pensive SARA ! thy soft cheek reclined
Thus on mine arm, most soothing sweet it is
To sit beside our Cot,...";
         /* Output:
         My pensive SARA ! thy soft cheek reclined
            Thus on mine arm, most soothing sweet it is
            To sit beside our Cot,... 
         */

         string quote = @"Her name was ""Sara.""";
         //Output: Her name was "Sara."

é realmente igual:

\\My Documents\

O símbolo @

O símbolo @ Especifica que caracteres de escape e quebras de linha devem ser ignoradas quando a seqüência é criada.As duas strings a seguir, portanto, são idênticas:

string p1 = "\\\\My Documents\\My Files\\";
string p2 = @"\\My Documents\My Files\";

ToString()

Os tipos de dados internos translation from VPE for Csharp todas fornecem o ToString método converte um valor em uma seqüência de caracteres. Esse método pode ser usado para converter valores numéricos em seqüências de caracteres, como este:

int year = 1999;
string msg = "Eve was born in " + year.ToString();
System.Console.WriteLine(msg);  // outputs "Eve was born in 1999"

Acessando caracteres individuais

Caracteres individuais contidos em uma seqüência de caracteres podem ser acessados usando métodos, sistema autônomo Substring, Replace, Split e Trim.

string s3 = "Visual C# Express";
System.Console.WriteLine(s3.Substring(7, 2));
// Output: "C#"

System.Console.WriteLine(s3.Replace("C#", "Basic"));
// Output: "Visual Basic Express"

// Index values are zero-based
int index = s3.IndexOf("C");
// index = 7

Também é possível copiar os caractere em uma matriz de caractere, como este:

string question = "hOW DOES mICROSOFT wORD DEAL WITH THE cAPS lOCK KEY?";
System.Text.StringBuilder sb = new System.Text.StringBuilder(question);

for (int j = 0; j < sb.Length; j++)
{
    if (System.Char.IsLower(sb[j]) == true)
        sb[j] = System.Char.ToUpper(sb[j]);
    else if (System.Char.IsUpper(sb[j]) == true)
        sb[j] = System.Char.ToLower(sb[j]);
}
// Store the new string.
string corrected = sb.ToString();
System.Console.WriteLine(corrected);
// Output: How does Microsoft Word deal with the Caps Lock key?            

Caracteres individuais de uma seqüência de caracteres podem ser acessados com um índice, como este:

string s5 = "Printing backwards";

for (int i = 0; i < s5.Length; i++)
{
    System.Console.Write(s5[s5.Length - i - 1]);
}
// Output: "sdrawkcab gnitnirP"

Alterando a Caixa

Para alterar as letras em uma seqüência de caracteres para superior ou minúsculas, use ToUpper() ou ToLower(), como este:

string s6 = "Battle of Hastings, 1066";

System.Console.WriteLine(s6.ToUpper());
// outputs "BATTLE OF HASTINGS 1066"
System.Console.WriteLine(s6.ToLower());
// outputs "battle of hastings 1066"

Comparações

A melhor maneira para comparar duas seqüências de caracteres não-localizada é usar o Equals método com o StringComparison.Ordinal e StringComparison.OrdinalIgnoreCase.

// Internal strings that will never be localized.
string root = @"C:\users";
string root2 = @"C:\Users";

// Use the overload of the Equals method that specifies a StringComparison.
// Ordinal is the fastest way to compare two strings.
bool result = root.Equals(root2, StringComparison.Ordinal);

Console.WriteLine("Ordinal comparison: {0} and {1} are {2}", root, root2,
                    result ? "equal." : "not equal.");

// To ignore case means "user" equals "User". This is the same as using
// String.ToUpperInvariant on each string and then performing an ordinal comparison.
result = root.Equals(root2, StringComparison.OrdinalIgnoreCase);
Console.WriteLine("Ordinal ignore case: {0} and {1} are {2}", root, root2,
                     result ? "equal." : "not equal.");

// A static method is also available.
bool areEqual = String.Equals(root, root2, StringComparison.Ordinal);


// String interning. Are these really two distinct objects?
string a = "The computer ate my source code.";
string b = "The computer ate my source code.";

// ReferenceEquals returns true if both objects
// point to the same location in memory.
if (String.ReferenceEquals(a, b))
    Console.WriteLine("a and b are interned.");
else
    Console.WriteLine("a and b are not interned.");

// Use String.Copy method to avoid interning.
string c = String.Copy(a);

if (String.ReferenceEquals(a, c))
    Console.WriteLine("a and c are interned.");
else
    Console.WriteLine("a and c are not interned.");

Objetos String também têm um CompareTo() método que retorna um valor inteiro com base no que se uma seqüência de caracteres é menor - que)<) ou posterior - que ()>) outro. Ao comparar cadeias de caracteres, será usado o valor Unicode e minúsculas tem um valor menor que letras maiúsculas.

// Enter different values for string1 and string2 to
// experiement with behavior of CompareTo
string string1 = "ABC";
string string2 = "abc";

int result2 = string1.CompareTo(string2);

if (result2 > 0)
{
    System.Console.WriteLine("{0} is greater than {1}", string1, string2);
}
else if (result2 == 0)
{
    System.Console.WriteLine("{0} is equal to {1}", string1, string2);
}
else if (result2 < 0)
{
    System.Console.WriteLine("{0} is less than {1}", string1, string2);
}
// Output: ABC is less than abc

Para procurar uma seqüência de caracteres dentro de outra seqüência, use IndexOf(). IndexOf() Retorna -1 se a seqüência de caracteres de Pesquisar não foi encontrada; caso contrário, retornará o índice baseado em zero no primeiro local em que ele ocorre.

// Date strings are interpreted according to the current culture.
// If the culture is en-US, this is interpreted as "January 8, 2008",
// but if the user's computer is fr-FR, this is interpreted as "August 1, 2008"
string date = "01/08/2008";
DateTime dt = Convert.ToDateTime(date);            
Console.WriteLine("Year: {0}, Month: {1}, Day: {2}", dt.Year, dt.Month, dt.Day);

// Specify exactly how to interpret the string.
IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);

// Alternate choice: If the string has been input by an end user, you might 
// want to format it according to the current culture:
// IFormatProvider culture = System.Threading.Thread.CurrentThread.CurrentCulture;
DateTime dt2 = DateTime.Parse(date, culture, System.Globalization.DateTimeStyles.AssumeLocal);
Console.WriteLine("Year: {0}, Month: {1}, Day {2}", dt2.Year, dt2.Month, dt2.Day);

/* Output (assuming first culture is en-US and second is fr-FR):
    Year: 2008, Month: 1, Day: 8
    Year: 2008, Month: 8, Day 1
 */

separação de uma string em substrings

Dividindo uma seqüência de caracteres em subseqüências, sistema autônomo, dividindo uma frase em palavras individuais, é uma tarefa de programação comuns.The Split() método leva uma char matriz de delimitadores, por exemplo, um caractere de espaço e retorna uma matriz de substrings. Você pode acessar essa matriz com foreach, como este:

string numString = "1287543"; //"1287543.0" will return false for a long
long number1 = 0;
bool canConvert = long.TryParse(numString, out number1);
if (canConvert == true)
  Console.WriteLine("number1 now = {0}", number1);
else
  Console.WriteLine("numString is not a valid long");

byte number2 = 0;
numString = "255"; // A value of 256 will return false
canConvert = byte.TryParse(numString, out number2);
if (canConvert == true)
  Console.WriteLine("number2 now = {0}", number2);
else
  Console.WriteLine("numString is not a valid byte");

decimal number3 = 0;
numString = "27.3"; //"27" is also a valid decimal
canConvert = decimal.TryParse(numString, out number3);
if (canConvert == true)
  Console.WriteLine("number3 now = {0}", number3);
else
  Console.WriteLine("number3 is not a valid decimal");            

Este código gera cada palavra em uma linha separada, como este:

The

cat

sat

on

the

mat.

Usando o StringBuilder

The StringBuilder classe cria um buffer de cadeia de caracteres que oferece melhor desempenho se seu programa realiza muita de manipulação de seqüência de caracteres. The StringBuilder classe também permite que você reatribua caracteres individuais, algo que o tipo de dados interna da seqüência de caracteres não oferece suporte.

Neste exemplo, um StringBuilder objeto é criado e seu Sumário é adicionado individualmente usando o Append método.

class TestStringBuilder
{
    static void Main()
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();

        // Create a string composed of numbers 0 - 9
        for (int i = 0; i < 10; i++)
        {
            sb.Append(i.ToString());
        }
        System.Console.WriteLine(sb);  // displays 0123456789

        // Copy one character of the string (not possible with a System.String)
        sb[0] = sb[9];

        System.Console.WriteLine(sb);  // displays 9123456789
    }
}

Consulte também

Tarefas

Como: Gerar literais String MultiLine

Como: Procure por uma string em uma matriz de seqüências de caracteres

Como: Pesquisar em uma string

Conceitos

Translation from VPE for Csharp linguagem Primer

Tipos de dados internos

Referência

Cadeia de Caracteres (Referência C#)