www.devmedia.com.br [versão para impressão]
Soluções rápidas no trabalho com char e string (VB e C#
(csharp)) – Parte II
KALLEBE LINS
Dese nvo lve do r .NET, MC TS W eb, MC TS Distribute d, Té cnico e m Siste m a s
Inte grado s de Gestão Em pre saria l. Atua lm ente tra balha co m o pro gram ado r .NET (VB e C #), dese nvolve ndo sistem as para W e b com a te cnolo gia W e b Service .
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.