Soluções rápidas no trabalho com char e string (VB e C#) – Parte I

 

Esse tutorial foi desenvolvido com objetivo de apresentar algumas das maneiras que podem ser utilizadas para se trabalhar com strings. Foram levantados alguns problemas simples que ocorrem no dia-a-dia e que, devido a pouca prática, acabam nos atrapalhando na hora de implementarmos aquele código tão simples.

 

Primeiro vamos entender o tipo que iremos trabalhar.

 

A classe System.String é um tipo referência que se comporta semelhante a um tipo valor. Por exemplo, quando você compara duas strings, você está comparando o conteúdo contido na string, não a referência do objeto;

 

Strings são imutáveis, que significa que ela não pode ser modificada. Operações que aparecem para modificar a string atual criam uma nova string, ou melhor, a string é modificada só que armazenada em uma nova posição na memória;

 

A string é uma seqüência do tipo Char. Qualquer referência para um caractere dentro de uma string é tratada como um char;

 

A classe System.Text.StringBuilder fornece um conjunto de métodos para construir e manipular strings dentro do Buffer. Quando as operações são completadas, o conteúdo pode ser convertido em uma string.

 

Para facilitar a navegação, os itens são apresentados na seguinte ordem:

 

1.Formatando Números dentro de Strings

2.Formatar Data e Hora

3.Recuperar uma Porção de uma String

4.Criar uma String Consistindo de um Caractere Repetido

5.Modificar a Caixa de todos os Caracteres em uma String

6.Desempenhar Case-Insensitive em Comparações de String

7.Interagir com Todos os Caracteres em uma String

8.Analisar uma Palavra dentro de uma Frase

9.Encontrar Todas as Ocorrências de um Texto Específico em uma String

10.Substituir Todas as Ocorrências de um Texto Específico em uma String

11.Inverter a Seqüência de uma String

12.Testando se a String e Null ou Empty

13.Inserir um Caractere Especial em uma String

14.Manipular Strings Rapidamente (StringBuilder)

15.Manipular um URI

 

 

1.   Formatar Números dentro de Strings

 

Problema:

Você deseja formatar números dentro de uma string qualquer para mostrar em algum controle ou mesmo imprimir na tela.

 

Solução:

Aplique ao objeto string o método Format, e use ele para personalizar o código de saída.

 

klsrtcsfig01.jpg 

Figura 01. Exemplo de String.Format

[Core C# and .NET / By Stephen C. Perry]

 

Como podemos ver, cada item do formato consiste de um índice e um alinhamento opcional e o formato da string.

 

·         O index é um inteiro baseado em zero, que indica o argumento que está sendo aplicado. O index pode ser repetido para referir o mesmo argumento mais de uma vez;

·         O alignment, opcional, é um inteiro que indica a largura mínima da área que contém o valor formatado. Se o valor do alinhamento é positivo, o valor é justificado a direita; se o valor é negativo, é justificado a esquerda;

·         O format string, opcional, contém o código formatado para ser aplicado para o valor do argumento. Você pode ainda informar a quantidade de casas decimais ou mesmo o formato de número preenchido com zero, no caso do tipo inteiro. Por exemplo, ("{0:C2}", 4834.5) tem a saída como R$ 4.834,50 e ("{0:D6}", 4834) como 004834.

 

Padrão de Formatação de Strings

Especificador

Significado

Saída

C

Valor monetário específico do local;

R$ 4.834,50

D

Inteiro geral

4834

E

Notação Científica

4.834E+003

F

Decimal de ponto fixo

4834.50

G

Número geral

4834.5

N

Formato usual específico do local para números

4,834.50 (Reino Unido/EUA)

4 834,50 (Europa Continental)

P

Notação de porcentagem

483.450,00%

X

Formato hexadecimal

1120

 

.NET também fornece formatação especial de caracteres que podem ser usadas para criar formatos numéricos personalizados. Os caracteres mais úteis são o 'jogo-da-velha' (#), zero (0), vírgula (,), ponto (.), porcentagem (%) e ponto-e-vírgula (;).

 

Vamos praticar um pouco, veja:

 

' vb

Dim NumeroD As Double = 4864.5

Dim NumeroI As Integer = 4864

Response.Write(String.Format("C = {0:c}", NumeroD) & "<br />")

Response.Write(String.Format("D = {0:d}", NumeroI) & "<br />")

Response.Write(String.Format("E = {0:e}", NumeroD) & "<br />")

Response.Write(String.Format("F = {0:f}", NumeroD) & "<br />")

Response.Write(String.Format("G = {0:g}", NumeroD) & "<br />")

Response.Write(String.Format("N = {0:n}", NumeroD) & "<br />")

Response.Write(String.Format("P = {0:p}", NumeroD) & "<br />")

Response.Write(String.Format("X = {0:x}", NumeroI) & "<br />")

 

Response.Write(NumeroD.ToString("##########.##") & "<br />")

Response.Write(NumeroD.ToString("0000000000.00") & "<br />")

 

// c#

Double NumeroD= 4864.5;

int NumeroI  = 4864;

Response.Write(String.Format("C = {0:c}", NumeroD) + "<br />");

Response.Write(String.Format("D = {0:d}", NumeroI) + "<br />");

Response.Write(String.Format("E = {0:e}", NumeroD) + "<br />");

Response.Write(String.Format("F = {0:f}", NumeroD) + "<br />");

Response.Write(String.Format("G = {0:g}", NumeroD) + "<br />");

Response.Write(String.Format("N = {0:n}", NumeroD) + "<br />");

Response.Write(String.Format("P = {0:p}", NumeroD) + "<br />");

Response.Write(String.Format("X = {0:x}", NumeroI) + "<br />");

 

Response.Write(NumeroD.ToString("##########.##") + "<br />");

Response.Write(NumeroD.ToString("0000000000.00") + "<br />");

 

Saída:

C = R$ 4.864,50

D = 4864

E = 4,864500e+003

F = 4864,50

G = 4864,5

N = 4.864,50

P = 486.450,00%

X = 1300

4864,5

0000004864,50

 

 

2. Formatar Data e Hora

 

Problema:

Você deseja formatar data e hora dentro de uma string qualquer para mostrar em algum controle ou mesmo imprimir na tela.

 

Solução:

O formato requer o objeto DateTime. Assim como números, esse objeto tem seu próprio conjunto de padrões de especificador de formato.

 

Formatando Data/Hora com Caracteres Padrão

Especificador

Significado

Saída (English)

d

Data curta

1/19/2004

D

Data longa

Monday, January 19, 2004

f

Data/Hora (hora curta)

Monday, January 19, 2004 4:05 PM

F

Data/Hora (hora completa)

Monday, January 19, 2004 4:05:20 PM

g

Data/Hora Geral (hora curta)

1/19/2004 4:05 PM

G

Data/Hora Geral (hora longa)

1/19/2004 4:05:20 PM

M, m

Mês dia

January 19

Y, y

Ano Mês

January, 2004

t

Hora curta

4:05 PM

T

Hora longa

4:05:20 PM

s

Data-Hora Universal. Conforme ISO 8601.

2004-01-19T16:05:20

u

Data-Hora universal

2004-01-19 16:05:20Z

U

Data-Hora Universal. Usa hora Universal.

Monday, January 19, 2004 21:05:20 PM

 

Na prática:

 

// c#

DateTime dataCorrente = DateTime.Now;

 

Response.Write(String.Format("Date: {0:d}", dataCorrente));

 

Response.Write("<br />");

 

Response.Write(String.Format("Date: {0:f}", dataCorrente));

 

Saída:

Date: 01/08/2007

Date: quarta-feira, 1 de agosto de 2007 9:08

 

Se o padrão de especificador de formato não atender sua necessidade, você ainda pode construir um formato personalizado de um conjunto de seqüências de caracteres, desenvolvido para esse propósito.

 

Padrão de Caracteres para Personalizar a Formatação Data/Hora

Especificador

Significado

Saída (English)

d

Dia do mês. Não mostra o zero.

5

dd

Dia do mês. Sempre tem dois dígitos.

05

ddd

Dia da semana com abreviação de três caracteres.

Mon

dddd

Dia da semana nome completo.

Monday

M

Número do Mês. Não mostra o zero.

1

MM

Número do mês mostra o zero se necessário.

01

MMM

Nome do mês com abreviação de três caracteres.

Jan

MMMM

Nome completo do mês.

January

y

Ano. Final um ou dois dígitos.

5

yy

Ano. Final um ou dois dígitos e mostra o zero se necessário.

05

yyyy

Quatro dígitos do ano.

2004

HH

Hora no formato 24 horas.

15

mm

Minutos, mostra o zero se necessário.

20

 

Na prática:

 

// c#

DateTime dataCorrente = DateTime.Now;

 

Response.Write(String.Format("{0:dddd} {0:MMM} {0:dd}", dataCorrente));

 

Response.Write("<br />");

 

Response.Write(dataCorrente.ToString("dd MMM yyyy"));

 

Saída:

quarta-feira ago 01

01 ago 2007

 

 

3. Recuperar uma Porção de uma String

 

Problema:

Você necessita recuperar uma porção da string baseado na posição e tamanho da string.

 

Solução:

Usar o método String.Substring que requer dois parâmetros inteiros, um startIndex (indicando a posição de início) e length (o tamanho contado a partir da posição de início).

 

' vb

Dim FullName As String = "Visual Studio"

Dim FirstName As String

 

' Recupera, a partir 0, 6 caracteres.

FirstName = FullName.Substring(0, 6)

' FirstName é agora "Visual"

 

// c#

String FullName = "Visual Studio";

String FirstName;

 

// Recupera, a partir 0, 6 caracteres.

FirstName = FullName.Substring(0, 6);

// FirstName é agora "Visual"

 

Você também pode pegar, a partir da posição de início, todos os caracteres seguidos.

 

' vb

LastName = FullName.Substring(7)

' LastName é agora "Studio"

 

// c#

LastName = FullName.Substring(7);

// LastName é agora "Studio"

 

Se o seu objetivo é somente pegar parte do nome então sugiro trabalhar com o método Split, apresentado anteriormente.