Strings um novo enfoque
O tipo de dado Strings é implementado no VB.NET com uma classe e não como uma estrutura e isto trouxe muitas implicações expandindo em muito as possibilidades de tratar e trabalhar com Strings.
Podemos definir Strings no VB.NET como uma representação imutável de caracteres.
Para começar com Strings no VB.NET vamos dar uma olha por 'trás dos panos' usando o objeto Browser :
a - Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)
b- Pressione a tecla F2 para que seja exibida a janela do Object Browser
| c- Do lado esquerdo da janela
ache o objeto - mscrolib - e clique no sinal de mais (+)
para que os objetos sejam exibidos do lado direito: O objeto mscorlib faz parte do .NET framework e os objetos que ele contém são namespaces que podemos referenciar em nossos projetos. |
![]() |
![]() |
- Após expandir e visualizar os objetos ,
procure pelo item String e selecione-o - Você verá do lado direito teremos os membros ( métodos e propriedades) do objeto String. - Perceba que temos muitos métodos sobrecarregados (métodos com o mesmo nome mas com argumentos diferentes). Ex:
|
Talvez a maior diferença entre Strings no VB 6.0 e Strings no VB.NET é que no VB.NET é que Strings não podem ser declaradas com um tamanho fixo. Ao atribuir um valor a uma String o valor do tamanho determina o tamanho da String.
No VB.NET uma instância de uma String não pode ser alterada depois de criada. Mesmo que você altere o valor atribuido a String , na verdade uma nova instância da String será criada para conter a alteração. Por exemplo :
| Dim nome As String =
"Jose Carlos Macoratti" nome = nome.Remove(19, 1) MsgBox("Meu nome é " & nome) |
Vejamos o que este 'inocente' código significa :
| Dim nome As String = "Jose Carlos Macoratti" | -Declaramos a variável String e atribuímos a ela o valor "José Carlos Macoratti" , com isto alocamos a memória apropriada na String para armazenar o valor |
| nome = nome.Remove(19, 1) | -Neste código estamos alterando o valor
da String - nome - pois estou removendo um caractere 't'
do nome ( o novo valor será igual a : Macorati) usando o
método - Remove. - Ao fazer isto uma nova instância da String será criada com o valor alterado e será retornado uma referência para a qual a variável nome esta definida. |
| MsgBox("Meu nome é " & nome) | Exibimos o valor final da variável do tipo String - nome |
Os novos métodos e propriedades da classe String
Neste primeiro contato com o Strings no VB.NET vamos ver o que mudou a nivel de tratamento de Strings : quais os novos métodos e propriedades e como usá-los. Comecemos pelos mais usados ; a seguir uma tabela comparando os métodos no VB6 e no VB.NET :
| VB 6.0 | VB.NET |
| Len | .Length |
| Mid | .Substring |
| Replace | .Replace |
| Instr | .IndexOf |
| Ucase | .ToUpper |
| Lcase | .ToLower |
| Split | .Split |
| Join | .Join |
1 - Obtendo o tamanho(comprimento) de uma String - Length
Length - Esta propriedade retorna o número de caracteres em uma string . Código exemplo :
| Private Sub
Button1_Click(ByVal
sender As
System.Object, ByVal
e As System.EventArgs) Handles Button1.Click Dim nome As String = "José Carlos Macoratti" Dim tamanho As Integer tamanho = nome.Length MsgBox("O número de caracteres em nome é : " & tamanho, MsgBoxStyle.Information, "Length") End Sub |
Observe a sintaxe usada : string.propriedade (a sintaxe é válida para as demais propriedades/métodos)
2- Obtendo partes de uma string (substrings) - Substring
Substring - Método que retorna uma substring pertencente a uma string :
Métodos sobrecarregagos : ( (para saber mais leia o artigo - VB.NET - Conceitos : Sobrecarga (Overloading)< )
| Private Sub
Button2_Click(ByVal
sender As
System.Object, ByVal
e As System.EventArgs) Handles Button2.Click
Dim nome As String = "Jefferson Andre Macoratti" Dim substring As String Dim sobrenome As String
substring = nome.Substring(0, 1) 'retorna a letra J - posição inicial (0) da string substring = substring & nome.Substring(10, 1) 'retorna a letra A - posiçlão 10 da string substring = substring & nome.Substring(16, 1) 'retorna a letra M - posição 16 da string
'retorna as iniciais JAM do nome completo MsgBox(substring, MsgBoxStyle.Information, "Substring") sobrenome = nome.Substring(16, 9) 'extrai a palavra - Macoratti - a partir da posição 16 extraindo 9 caracteres
'retona - Macoratti MsgBox(sobrenome, MsgBoxStyle.Information, "Substring")
End Sub |
Observe que :
3- Procurando uma string/substring dentro de outra string - IndexOf
IndexOf - método publico que retorna a posição de uma string/substring dentro de outra string.
Os métodos sobrecarregados são : (para saber mais leia o artigo - VB.NET - Conceitos : Sobrecarga (Overloading)< )
- Overloads Public Function IndexOf(Char) As Integer : retorna o índice da primeira ocorrência do caracter Unicode na string
- Overloads Public Function IndexOf(String) As Integer : retorna o índice da primeira ocorrência da string na instância.
- Overloads Public Function IndexOf(Char, Integer) As Integer : retorna o índice da primeira ocorrência do caracter Unicode na string . A procura começa pela posição do caractere definido.
- Overloads Public Function IndexOf(String, Integer) As Integer : retorna o índice da primeira ocorrência da string na instância. A procura começa pela posição do caractere definido.
- Overloads Public Function IndexOf(Char, Integer, Integer) As Integer : retorna o índice da primeira ocorrência do caractere na instância. A procura começa pela posição do caractere definido e examina um número definido de posições de caracteres.
- Overloads Public Function IndexOf(String, Integer, Integer) As Integer : retorna o índice da primeira ocorrência da string na instância. A procura começa pela posição do caractere definido e examina um número definido de posições de caracteres.
Vejamos um exemplo :
| Private Sub
Button3_Click(ByVal
sender As
System.Object, ByVal
e As System.EventArgs) Handles Button3.Click Dim nome As String = "Jessica Naara Macoratti" Dim posicao As Integer posicao = nome.IndexOf("Naara") 'retorna 8 pois Naara tem inicio na posição 8 da string nome posicao = nome.IndexOf("M") 'retorna 14 que indica a posição da letra M na string posicao = nome.IndexOf("a", 7) 'retorna 9 que é a posição da primeira letra 'a' após a sétima posição posicao = nome.IndexOf("ra", 5) 'retorna 11 que indica posição de inicio da string 'ra' a partir da posição 5 End Sub |
4- Procurando e substituindo texto em uma string - Replace
Replace - Este método procura por um texto/caractere específico em uma string e o substitui por outro texto/caractere indicado.
Os métodos sobrecarregados são :
Overloads Public Function Replace(Char, Char) As String - Substitui todas as ocorrências do caracter Unicode especificado na String pelo caractere Unicode definido.
Overloads Public Function Replace(String, String) As String - Substitui todas as ocorrências do String Unicode especificado na String pela String Unicode definido.
Exemplo :
|
Dim
texto As
String
= " Nossa ! como esta calor " texto = texto.Replace("!", "!!!") texto = texto.Replace("calor", "frio") MsgBox(texto, MsgBoxStyle.Information)
|
- Neste
exemplo primeiro substituímos o caractere ! por
!!! - A seguir substituímos a string 'Calor' pela string 'frio' - Exibimos o resultado com um msgbox - Nossa !!! como esta frio |
5 - Convertendo uma string para Caixa Alta e/ou Caixa Baixa - ToUper/ToLower
- Convertendo para caixa alta - ToUpper
Overloads Public Function ToUpper() As String - Retorna uma copia da String em caixa alta.
Overloads Public Function ToUpper(CultureInfo) As String - Retorna uma copia da String em caixa alta , levando em consideração a informação especifica da cultura.
Convertendo para caixa baixa: ToLower
Overloads Public Function ToLower() As String - Retorna uma copia da String em caixa baixa
Overloads Public Function ToLower(CultureInfo) As String - Retorna uma copia da String em caixa baixa , levando em consideração a informação especifica da cultura.
Obs: Alguns valores válidos para - CultureInfo
| Nome Culture | Identificador Culture | Lingua-Regiao |
|---|---|---|
| "" (empty string) | 0x007F | invariant culture |
| af | 0x0036 | Afrikaans |
| af-ZA | 0x0436 | Afrikaans - South Africa |
| sq | 0x001C | Albanian |
| sq-AL | 0x041C | Albanian - Albania |
| ar | 0x0001 | Arabic |
| ar-DZ | 0x1401 | Arabic - Algeria |
| ar-BH | 0x3C01 | Arabic - Bahrain |
| ar-EG | 0x0C01 | Arabic - Egypt |
| ar-IQ | 0x0801 | Arabic - Iraq |
Exemplos :
|
Ex1- Dim texto as string = " hoje é sexta feira " texto = texto.ToUpper
Ex2- Console.WriteLine(Char.ToUpper("a"c))
|
O
retorno será : HOJE É SEXTA FEIRA
O retorno será : A |
|
Ex3 - Dim texto as string = "JOSE CARLOS MACORATTI" texto = texto.ToLower
Ex4- Console.WriteLine(Char.ToLower("A"c)) |
O
retorno será : jose carlos macoratti
O retorno será : a |
6 - Criando matrizes (arrays) de strings com Split()
Overloads Public Function Split(ParamArray Char() AS String) - Este método identifica as substrings presentes em uma string que são delimitadas por um ou mais caracteres específicos em uma matriz , extrai as substrings e as coloca em uma matriz de strings.
Overloads Public Function Split(Char(), Integer) As String() - Este método identifica as substrings presentes em uma string que são delimitadas por um ou mais caracteres específicos em uma matriz , extrai as substrings e as coloca em uma matriz de strings. O inteiro é o parâmetro que especifica o número máximo de elementos da matriz a retornar.
Exemplo:
Vamos extrair as strings de uma caixa de texto Multiline e colocar cada string em um vetor para depois exibir cada uma em um controle ListBox . Abaixo temos a caixa de texto - TextoBox1 - exibindo uma relação de times de futebol separados por vírgula. Vamos extrair cada time , gerar uma matriz com os nomes dos times e a seguir exibí-las no controle ListBox1.
![]() |
O
código associado ao evento Click do botão de comando -
Button5 é o seguinte: - GetUpperBound(0) - indica o último elemento da matriz com dimensão indicada.(0)
|
Veja mais alguns resultados usando o método Split() :
| Entrada | separador | Saida |
|---|---|---|
| "42, 12, 19" | new Char[] {',', ' '} | {"42", "", "12", "", "19"} |
| "42..12..19" | new Char[] {'.'} | {"42", "", "12", "", "19"} |
| "Banana" | new Char[] {'.'} | {"Banana"} |
| "São\nPaulo" | new Char[] {} | {"São", "Paulo"} |
| "Jose\nCarlos\nMacoratti" | null | {"José", "Carlos", "Macoratti"} |
7 -
vai continuar ...![]()
José Carlos Macoratti