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

 

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

 

Problema:

Você deseja contar a quantidade de ocorrências de um caractere ou uma palavra em uma string.

 

Solução:

Use o método String.IndexOf para localizar a ocorrência desejada.

O método abaixo retorna a quantidade de ocorrências:

 

' vb

Private Function QuantidadeAssociada(ByVal stringParaConsulta As String, _

ByVal procurarPor As String) As Integer

 

Dim Posicao As Integer = 0

Dim Ocorrencias As Integer = 0

 

' Esse loop existe enquanto Position = -1, que significa

' que não encontrou (caractere ou palavra) associada(s).

Do

Posicao = stringParaConsulta.IndexOf(procurarPor, Posicao)

If Posicao <> -1 Then

' Uma ocorrencia encontrada.

' Incrementa a quantidade de ocorrencias.

Ocorrencias += 1

 

' Move para frente na string a quantidade

' igual a quantidade da termo procurado.

Posicao += procurarPor.Length

End If

Loop Until Posicao = -1

 

Return Ocorrencias

 

End Function

 

// c#

private int QuantidadeAssociada(String stringParaConsulta ,

String procurarPor)

{

int Posicao = 0;

int Ocorrencias = 0;

 

// Esse loop existe enquanto Position = -1, que significa

// que não encontrou (caractere ou palavra) associada(s).

do

{

Posicao = stringParaConsulta.IndexOf(procurarPor, Posicao);

if (Posicao != -1)

{

// Uma ocorrencia encontrada.

// Incrementa a quantidade de ocorrencias.

Ocorrencias += 1;

 

// Move para frente na string a quantidade

// igual a quantidade da termo procurado.

Posicao += procurarPor.Length;

}

} while (Posicao != -1);

 

return Ocorrencias;

}

 

Agora é só consultar:

 

' vb

Dim Text As String = "consultando uma ocorrencia da palavra 'lição'. " & _

"consultando uma ocorrencia da palavra 'lição'. " & _

"consultando uma ocorrencia da palavra 'lição'. "

 

Response.Write(QuantidadeAssociada(Text, "lição"))

Response.Write("<br />")

Response.Write(QuantidadeAssociada(Text, "a"))

 

// c#

String Text= "consultando uma ocorrencia da palavra 'lição'. " +

"consultando uma ocorrencia da palavra 'lição'. " +

"consultando uma ocorrencia da palavra 'lição'. ";

 

Response.Write(QuantidadeAssociada(Text, "lição"));

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

Response.Write(QuantidadeAssociada(Text, "a"));

 

Saída:

3

21

 

 

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

 

Problema:

Você deseja substituir cada ocorrência de uma palavra ou caractere em uma string.

 

Solução:

Usar o método String.Replace.

 

' vb

Dim Texto As String = "consultando uma ocorrencia da palavra 'lição'." & _

"consultando uma ocorrencia da palavra 'lição'. " & _

"consultando uma ocorrencia da palavra 'lição'. "

 

Dim TextoSubstituido As String = Texto.Replace("lição", "questão")

 

// c#

String Texto = "consultando uma ocorrencia da palavra 'lição'." +

"consultando uma ocorrencia da palavra 'lição'. " +

"consultando uma ocorrencia da palavra 'lição'. ";

 

String TextoSubstituido = Texto.Replace("lição", "questão");

 

Saída:

consultando uma ocorrencia da palavra 'questão'. consultando uma ocorrencia da palavra 'questão'. consultando uma ocorrencia da palavra 'questão'.

 

 

11. Inverter a Seqüência de uma String

 

Problema:

Você necessita reverter a ordem das letras em uma string.

 

Solução:

Usar o método Array.Reverse.

 

' vb

Dim Texto As String = "Mudar a ordem das letras em uma frase."

 

' Converte Texto para um Array de Caractere

Dim Charactere() As Char = Texto.ToCharArray()

 

Array.Reverse(Charactere)

 

' Cria String com Array de Caracteres invertidos

Dim Reversed As New String(Charactere, 0, Charactere.Length)

 

Response.Write(Reversed)

 

// c#

String Texto = "Mudar a ordem das letras em uma frase.";

 

// Converte Texto para um Array de Caractere

Char[] Charactere = Texto.ToCharArray();

 

Array.Reverse(Charactere);

 

// Cria String com Array de Caracteres invertidos

String Reversed = new String(Charactere, 0, Charactere.Length);

 

Response.Write(Reversed);

 

Ou ainda, você pode utilizar a função StrReverse do VB6 que também é compatível no .NET:

 

Dim Texto As String = "Mudar a ordem das letras em uma frase."

 

Dim Reversed As String

 

' Faz inversão de Texto automaticamente

Reversed = StrReverse(Texto)

 

Response.Write(Reversed)

 

Saída:

.esarf amu me sartel sad medro a raduM

 

 

12. Verificar se a String e Null ou Empty

 

Problema:

Você necessita rapidamente checar se a string é null ou o tamanho é igual a zero.

 

Solução:

Use o método estático IsNullOrEmpty da classe String.

 

' vb

Dim verificaString As Boolean = String.IsNullOrEmpty(Texto)

 

// c#

bool verificaString = String.IsNullOrEmpty(Texto);

 

 

13. Inserir um Caractere Especial em uma String

 

Problema:

Você necessita usar caracteres estendidos que não contém entrada no teclado.

 

Solução:

Para inserir um caractere especial você deve informar qual o número do caractere Unicode. Para isso utilize a ferramenta “Mapa de Caracteres” do Windows, acessando o “Iniciar à Executar” na caixa abrir digite “charmap.exe” e clique em “OK”. Aparecerá a ferramenta conforme abaixo:

 

klsrtcsfig02.jpg

 

O número no canto inferior esquerdo (00A9) é o código em formato hexadecimal. O número no canto inferior direito (0169) é equivalente ao código decimal.

 

' vb

Dim CharCode As Integer = 169

Dim SpecialChar As Char = Convert.ToChar(CharCode)

Response.Write(SpecialChar.ToString())

 

// c#

int CharCode = 169;

Char SpecialChar = Convert.ToChar(CharCode);

Response.Write(SpecialChar.ToString());

 

Saída:

©

 

Para utilizar o formato em hexadecimal você deve colocar os caracteres &H antes do valor em hexadecimal para o VB e converter para o tipo Char. Para o c#, utilize a sobrecarga com System.Globalization.NumberStyles.HexNumber.

 

' vb

Dim SpecialChar As Char = Convert.ToChar(&HA9)

Response.Write(SpecialChar.ToString())

 

// c#

Char SpecialChar = Convert.ToChar(byte.Parse("A9",

System.Globalization.NumberStyles.HexNumber));

Response.Write(SpecialChar.ToString());

 

Saída:

©

 

 

14. Manipular Strings Rapidamente (StringBuilder)


Problema:

Você necessita desempenhar uma manipulação de string repetida, e deseja melhorar o desempenho.

 

Solução:

Use a classe System.Text.StringBuilder para desempenhar essa operação de string, e converta o final do resultado em uma string chamando ToString.

 

O problema de se trabalhar com strings é que a memória deve ser alocada cada vez que o conteúdo da string é modificado. Portanto, se nós fizermos um fluxo de repetição que interage 100 vezes, concatenando um caractere a uma string, teremos ao final 100 strings na memória, diferenciando-se cada uma delas pela adição de um simples caractere.

 

A classe StringBuilder soluciona este problema alocando uma área de trabalho (Buffer), onde seus métodos podem ser aplicados para esta string. Esses métodos incluem os modos para concatenar (append), inserir (insert), deletar (deletar), remover (remove) e substituir (replace) caracteres. Por fim, todas as operações ocorrem no Buffer e não requerem uma nova alocação de memória.

 

 

15. Manipular um URI

 

Problema:

Você deseja recuperar uma porção de um URI (semelhante como prefixo, diretório, página, string de consulta).

 

Solução:

Processe o URI usando a classe System.Uri.

 

' vb

Dim MyUri As New Uri("http://search.yahoo.com/bin/search?p=dog")

Response.Write(" Scheme: " & MyUri.Scheme & "<br />")

Response.Write(" Host:   " & MyUri.Host & "<br />")

Response.Write(" Path:   " & MyUri.AbsolutePath & "<br />")

Response.Write(" Query:  " & MyUri.Query & "<br />")

Response.Write(" Type:   " & MyUri.HostNameType.ToString() & "<br />")

Response.Write(" Port:   " & MyUri.Port & "<br />")

 

// c#

Uri MyUri = new Uri("http://search.yahoo.com/bin/search?p=dog");

Response.Write(" Scheme: " + MyUri.Scheme + "<br />");

Response.Write(" Host:   " + MyUri.Host + "<br />");

Response.Write(" Path:   " + MyUri.AbsolutePath + "<br />");

Response.Write(" Query:  " + MyUri.Query + "<br />");

Response.Write(" Type:   " + MyUri.HostNameType.ToString() + "<br />");

Response.Write(" Port:   " + MyUri.Port + "<br />");

 

Saída:

Scheme: http

Host: search.yahoo.com

Path: /bin/search

Query: ?p=dog

Type: Dns

Port: 80

 

 

Referências

 

Ø  Microsoft Visual Basic .NET Programmer's Cookbook / by Matthew MacDonald ;

Ø  Visual Basic 2005 Cookbook / By John Clark Craig, Tim Patrick ;

Ø  C# Cookbook, 2nd Edition / By Jay Hilyard, Stephen Teilhet ;

Ø  Essential C# 2.0 / By Mark Michaelis.