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

 

4. Criar uma String Consistindo de um Caractere Repetido

 

Problema:

Você necessita rapidamente criar uma string que consiste de um simples caractere repetido em vários tempos (ex.: "------------").

 

Solução:

 

' vb

Dim hifen As New String("-"c, 50)

Response.Write(hifen)

 

// c#

String hifen = new String('-', 50);

Response.Write(hifen);

 

Saída:

--------------------------------------------------

 

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

 

Problema:

Você deseja em caixa alta ou baixa todas às letras em uma string.

 

Solução:

Os métodos ToUpper() e ToLower() (c# e vb) fazem facilmente a conversão de strings para caixa alta ou baixa, ou ainda mescla esta conversão (vb). Podemos também utilizar, como padrão no VB, os métodos UCase() e LCase(). Para mesclar as caixas utilize a função StrConv() do VB.

 

' vb

Dim Texto, CaixaMista, CaixaAlta, CaixaBaixa As String

Texto = "Visual Studio"

 

CaixaAlta = Texto.ToUpper()

' ToUpper() retorna "VISUAL STUDIO"

 

CaixaBaixa = CaixaAlta.ToLower()

' ToLower() retorna "visual studio"

 

CaixaAlta = UCase(Texto)

' UCase() retorna "VISUAL STUDIO"

 

CaixaBaixa = LCase(CaixaAlta)

' LCase() retorna "visual studio"

 

CaixaMista = StrConv(CaixaBaixa, VbStrConv.ProperCase)

' StrConv(str, ProperCase) retorna "Visual Studio"

 

// c#

String MixedCase, UpperCase, LowerCase;

MixedCase = "Visual Studio";

 

UpperCase = MixedCase.ToUpper();

// UpperCase é agora "VISUAL STUDIO"

 

LowerCase = MixedCase.ToLower();

// LowerCase é agora "visual studio"

 

 

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

 

Problema:

Você necessita comparar duas strings para ver se elas associam até mesmo o tipo de caixa (alta ou baixa) (case-sensitive).

 

Solução:

Use a versão de sobrecarga do método estático String.Compare que aceita um parâmetro Boolean para ignoreCase.

 

Retorna 0 (zero) se as strings são iguais, -1 se a primeira string for menor que a segunda (StringA < StringB), ou 1 se a primeira string for maior que a segunda (StringA > StringB). Opcionalmente, o método também aceita um parâmetro booleano chamado ignoreCase que desempenha comparações case-sensitive.

 

' vb

If String.Compare(StringA, StringB, True) = 0 Then

      ' Strings associadas.

End If

 

// c#

if (String.Compare(StringA, StringB, True) = 0)

{

// Strings associadas.

}

 

Ou ainda:

 

' vb

If StringA.ToUpper() = StringB.ToUpper() Then

      ' Strings associadas.

End If

 

// c#

if (StringA.ToUpper() = StringB.ToUpper())

{

      // Strings associadas.

}

 

 

7. Interagir com Todos os Caracteres em uma String

 

Problema:

Você deseja examinar cada caractere em uma string individualmente.

 

Solução:

 

' vb

Dim MyString As String = "Iteragindo com caracteres"

Dim i As Integer

For i = 0 To MyString.Length - 1

      Response.Write("Caractere: " & MyString.Chars(i) & "<br />")

Next

 

// c#

String MyString = "Iteragindo com caracteres";

Char[] caractere = MyString.ToCharArray();

for (int i = 0; i < (MyString.Length - 1); i++)

{

Response.Write("Caractere: " + caractere[i] + "<br />");

}

 

Ou ainda:

 

' vb

Dim MyString As String = "Iteragindo com caracteres"

Dim Letter As Char

For Each Letter In MyString

      Response.Write("Caractere: " & Letter & "<br />")

Next

 

// c#

String MyString = "Iteragindo com caracteres";

foreach (Char Letter in MyString)

{

Response.Write("Caractere: " + Letter + "<br />");

}

 

Saída:

Caractere: I

Caractere: t

Caractere: e

Caractere: r

Caractere: a

Caractere: g

Caractere: i

Caractere: n

Caractere: d

Caractere: o

Caractere:

Caractere: c

Caractere: o

Caractere: m

Caractere:

Caractere: c

Caractere: a

Caractere: r

Caractere: a

Caractere: c

Caractere: t

Caractere: e

Caractere: r

Caractere: e

Caractere: s

 

Você pode verificar também o tipo do caractere, a saber:

 

IsDigit: número de 0–9.

IsNumber: número hexadecimal de 0–F.

IsLetter: letra A–Z.

IsLetterOrDigit: caracteres alfa-numéricos de A–Z ou 0–9.

IsLower e IsUpper: depende do caso do caractere.

IsPunctuation: caractere que é classificado como uma pontuação Unicode.

IsSymbol: caractere que é classificado como um símbolo Unicode.

IsWhiteSpace: caractere classificado como um espaço-branco em Unicode (tipicamente um espaço, tab, quebra de linha, etc.).

 

Sendo assim:

 

' vb

Dim MyString As String = "Iteragindo com caracteres"

Dim Letter As Char

For Each Letter In MyString

      Response.Write(Letter)

      If (Char.IsWhiteSpace(Letter)) Then Response.Write("<br />")

Next

 

// c#

String MyString = "Iteragindo com caracteres";

foreach(Char Letter in MyString)

{

Response.Write(Letter);

if (Char.IsWhiteSpace(Letter)) Response.Write("<br />");

}

 

Saída:

Iteragindo

com

caracteres

 

 

8. Analisar uma Palavra dentro de uma Frase

 

Problema:

Você deseja analizar uma string e recuperar uma lista de todas as palavras que contém.

 

Solução:

Usar o método Split que aceita um delimitador de caracteres. O método quebra a string cada vez que esse delimitador for encontrado.

 

' vb

Dim sentenca As String = "Sobremesa preparada com banana ou outra fruta."

Dim separador() As Char = {" "}

Dim palavras() As String

 

' Quebra a sentenca.

palavras = sentenca.Split(separador)

 

' Mostra a sentenca dividida.

Dim palavra As String

For Each palavra In palavras

      Response.Write("Palavra: " & palavra & "<br />")

Next

 

// c#

String sentenca= "Sobremesa preparada com banana ou outra fruta.";

Char[] separador = new Char['\0'];

String[] palavras;

 

// Quebra a sentenca.

palavras = sentenca.Split(separador);

 

// Mostra a sentenca dividida.

foreach (String palavra in palavras)

{

Response.Write("Palavra: " + palavra + "<br />");

}

 

Saída:

Palavra: Sobremesa

Palavra: preparada

Palavra: com

Palavra: banana

Palavra: ou

Palavra: outra

Palavra: fruta.

 

Ocorre um problema quando você tenta quebrar a string com vários tipos de pontuações (semelhantes como (.) ponto, (,) vírgula, ...) que são usualmente seguidos de espaços em branco. O método Split retorna, neste caso, uma string vazia. Dessa forma, você pode implementar um método que retira os espaços retornados:

 

' vb

Private Function OtimizarQuebra(ByVal stringToSplit As String, _

      ByVal delimitador() As Char) As String()

 

' Quebra uma lista de palavras dentro do array.

Dim Palavras() As String

Palavras = stringToSplit.Split(delimitador)

 

' Adiciona cada palavra valida no ArrayList.

Dim PalavrasFiltradas As New ArrayList()

Dim Palavra As String

For Each Palavra In Palavras

      ' A string não pode ser vazia, neste caso um espaço.

      If Palavra <> String.Empty Then

            PalavrasFiltradas.Add(Palavra)

      End If

Next

 

' Converte o ArrayList para um array de String.

Return CType(PalavrasFiltradas.ToArray(GetType(String)), String())

 

End Function

 

// c#

private String[] OtimizarQuebra(String stringToSplit , Char[] delimitador)

{

 

// Quebra uma lista de palavras dentro do array.

String[] Palavras;

Palavras = stringToSplit.Split(delimitador);

 

// Adiciona cada palavra valida no ArrayList.

ArrayList PalavrasFiltradas = new ArrayList();

foreach (String Palavra in Palavras)

{

// A string não pode ser vazia, neste caso um espaço.

if (Palavra != "")

{

PalavrasFiltradas.Add(Palavra);

}

}

 

// Converte o ArrayList para um array de String.

return (String[])PalavrasFiltradas.ToArray(typeof(String));

 

}

 

O problema está resolvido:

 

' vb

Dim sentenca As String = "Sobremesa preparada com banana, maçã," & _

            " abacate, melancia ou outra fruta."

 

Dim separador() As Char = {",", " "}

Dim palavras() As String

 

' Quebra a sentenca.

palavras = OtimizarQuebra(sentenca, separador)

 

' Mostra a sentenca dividida.

Dim palavra As String

For Each palavra In palavras

      Response.Write("Palavra: " & palavra & "<br />")

Next

 

// c#

String sentenca = "Sobremesa preparada com banana, maçã," +

" abacate, melancia ou outra fruta.";

 

Char[] separador = { ' ',',' };

String[] palavras;

 

// Quebra a sentenca.

palavras = OtimizarQuebra(sentenca, separador);

 

// Mostra a sentenca dividida.

foreach (String palavra in palavras)

{

Response.Write("Palavra: " + palavra + "<br />");

}

 

Saída:

Palavra: Sobremesa

Palavra: preparada

Palavra: com

Palavra: banana

Palavra: maçã

Palavra: abacate

Palavra: melancia

Palavra: ou

Palavra: outra

Palavra: fruta.