VB.NET - 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 ou ainda podemos dizer que no VB.NET as strings são implementadas como objetos da Classe Strings que faz parte do namespace System da plataforma .NET framework.

 

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.)

  1. Project Types : Visual Basic Projects
  2. Templates : Windows Application
  3. Name : Strings
  4. Location : c:\vbnet \Strings

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: 

  1. Format (String, String)
  2. Format (String, Object())
  3. Format (String, Object)
  4. Format (String, Object, Object)

 

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 atribuído 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) )

  1. Overloads Public Function Substring(Integer) As String  :   Integer indica o início da posição da substring.
  2. Overloads Public Function Substring(Integer1, Integer2) As String Integer1 indica o início da posição da substring e Integer2 o tamanho da substring a ser extraída.
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) )

  1.  Overloads Public Function IndexOf(Char) As Integer : retorna o índice da primeira ocorrência do caracter Unicode na string
  1.  Overloads Public Function IndexOf(String) As Integer : retorna o índice da primeira ocorrência da string na instância.
  1.  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.
  1.  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.
  1.  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.
  1.  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 exibi-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)

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

Dim texto As String = TextBox1.Text

Dim matriz() As String

Dim j As Integer

matriz = texto.Split(",")

For j = 0 To matriz.GetUpperBound(0)

     ListBox1.Items.Add(matriz(j))

Next

End Sub

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"}


Por enquanto é só , vamos continuar falando de strings no VB.NET em um outro artigo
...

 


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#
 

   Gostou ?   Compartilhe no Facebook    Compartilhe no Twitter

Referências:


José Carlos Macoratti