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

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

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

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

7 -

 

vai continuar ...


José Carlos Macoratti