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.