Formatação de strings

O método “String.Format” permite formatações sofisticadas, usando uma espécie de “linguagem de formatação”, de forma análoga ao printf do C/C++, embora a string de formatação seja diferente.

O método Format aceita uma “string de formatação” e um valor (ou array de valores). Veja um exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
int N = 123456;
string s;
s = String.Format ("Valor: {0} à vista", N);
Console.WriteLine(s);
s = String.Format ("Valor: {0:c} à vista", N);
Console.WriteLine(s);
// {0} indica o primeiro valor passado; {1} indica o segundo e assim por diante
// Podemos colocar e strings de formatação depois
s = String.Format ("Valor: {0:c} à vista por {1:N0} unidades", new object[] {N, 12});
Console.WriteLine(s);
// Podemos repetir o valor na string­
s = Strin.Format("Valor:{0:c} à vista por {1-N0} unidades compradas e {l:N0} entregues", new object[] {N, 12});

Note que {0} indica o primeiro valor passado; { 1 } indica o segundo e assim por diante. Podemos colocar “:” e strings de formatação depois do número, por exemplo, {0:N}. Note que podemos repetir um valor na string.

Manipulando strings

Existem diversos métodos no próprio tipo string para sua manipulação. No entanto, as strings são imutáveis, ou seja, não podem ser alteradas uma vez criadas. Até é possível criar outra string, mas não mudá-las. Nos casos em que seria conveniente modificar a string, podemos usar a classe “StringBuilder”. Veja o exemplo a seguir:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Text;
 
public class Class1
{
      // Troca um caractere por outro dentro da string
      static void Troca(ref StringBuilder s, char Chl, char Ch2)
      {
            for(int i = 0; i < s.Length; i++)
            {
                  if (s[i] == Chl)
                        s[i] = Ch2;
            }
      }
 
      public static void Main()
      {
            // Cria a string
            StringBuilder s = new StringBuilder("Maria tinha um carneirinho");
            // Troca caracteres
            Troca(ref s, ‘ ‘, ‘_’);
            // Exibe
            Console.WriteLine(s);
      }
}

O classe string possui uma série de métodos que auxiliam na sua manipulação, entre eles:

  • Substring
  • IndexOf
  • ToUpper
  • ToLower
  • StartsWith
  • EndsWith
  • TrimStart
  • TrimEnd
  • Trim
  • PadLeft
  • PadRight
  • Join
  • Split
  • Format

Estas serão vistas mais adiante com detalhes.

String (por referência)

Tipo string

As strings são tecnicamente um tipo por referência, mas possuem algumas características especiais:

  • Não precisam ser inicializadas com o operador new.
  • A atribuição de uma variável a outra funciona como se copiasse o conteúdo, criando efetivamente outra cópia da variável.
  • Uma string contendo o valor null é uma string vazia; não é um erro usá-la.
  • Você não pode criar uma classe derivada de string.

As strings contém caracteres Unicode e podem ter até 1G de comprimento. Veja um exemplo:

1
2
3
4
5
6
7
8
9
10
...
// Declara e inicializa uma string
string Nome = “Maria”
// Copia para outra string. Se alterarmos uma delas, a outra manterá o seu valor
string NovoNome = Nome;
// Atribui à string antiga
Nome = “John”;
// Exibe “John – Mary”
System.Console.WriteLine(Nome +-+ NovoNome);
...

Existem diversas operações definidas para strings. As principais são:

  • [] para ler um caractere específico;
  • == para comparar valores;
  • + para concatenar;
Tipo lmplementação
string String Unicode com até 1 giga caracteres.

As strings são consideradas imutáveis e não podem ser alteradas depois de criadas. Quando você efetua uma operação qualquer, como por exemplo, concatenar um caractere, você na verdade está criando outra string e descartando a anterior. Caso você queira alterar uma string, use “StringBuilder”. Em algumas situações, a performance com “StringBuilder” pode ser bem melhor.