VB .NET - Separando Strings com função Split()
A função Split() do VB .NET é muito versátil e pode ser usada em muitos cenários quando precisamos separar strings.
Na verdade a função Split retorna um array de única dimensão contendo o número de substrings separadas no processo dependendo do critério e delimitador usado.
A sintaxe dessa função é a seguinte:
Function Split( ByVal Expression As String, Optional ByVal Delimiter As String = " ", Optional ByVal Limit As Integer = -1, Optional ByVal Compare As CompareMethod = CompareMethod.Binary ) As String() |
Onde :
- Se Expression for
uma string de comprimento zero ("") , a função Split
retornará um array de um único elemento contendo a string de
comprimento zero.
- Se Delimiter for uma string de comprimento
zero, ou se ele não aparecer na Expression, a função Split
retornará um array com um único elemento contendo a string
Expression por inteiro;
- Quando Limit for igual a -1, a função Split
separa a string de entrada a cada ocorrência do delimitador da
string e retorna as substring em um array;
- Quando a função Split encontra dois delimitadores em uma
linha, ou um no início e outro no fim da string, ele interpreta
esses delimitadores como envolvidos por uma string vazia
("");
- O argumento Compare pode conter os seguintes
valores:
Constante | Descrição | Valor |
---|---|---|
CompareMethod.Binary | Realiza uma comparação binária | 0 |
CompareMethod.Text | Realiza uma comparação textual | 1 |
A seguir temos exemplos de utilização de Split mostrando como esses parâmetros podem afetar o resultado de retorno da função:
Função Split | Valor retornado |
---|---|
Split("40, 12, 19") | {"40," , "12," , "19"} |
Split("40, 12, 19", ", ") | {"40", "12", "19"} |
Split("40, 12, 19", ", ", 2) | {"40", "12, 19"} |
Split("190.168.0.1", ".") | {"190", "168", "0", "1"} |
Split("Macoratti e Miriam", " AND ") | {"Macoratti e Miriam"} |
Split("Macoratti e Miriam", " AND ", ,CompareMethod.Text) | {"Macoratti", "Miriam"} |
Split("macoratti@yahoo.com", "@",1) | {"macoratti@yahoo.com"} |
Split("macoratti@yahoo.com", "@",2) | {"macoratti", "yahoo.com"} |
Exemplos de utilização da função Split()
Em todos os projetos estaremos usando o Visual Basic 2010 Express Edition em uma aplicação do tipo Windows Forms Application;
Vamos iniciar com um exemplo bem simples onde iremos separar strings com base no delimitador space => (" "c)
Private Sub btnAplicarSplit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAplicarSplit.Click ' Vamos separar esta string Dim str As String = txtStringEntrada.Text ' Separa string baseado em spaços Dim palavras As String() = str.Split(New Char() {" "c}) ' Percorremos as palavras da strings separadas exibindo-as no ListBox Dim palavra As String For Each palavra In palavras lstResultado.Items.Add(palavra) Next End Sub |
O código é muito simples:
- Recebemos a string e atribuímos a
uma variável string chamada str,
- e a seguir alocamos um array identificado como New
Char() bem como um array de String() para
armazenar as substrings separadas;
- finalmente efetuamos um laço For/Each para
percorrer o array de strings e exibimos o resultado no ListBox.
Vamos agora alterar o código do botão Aplicar a função Split para torná-la mais genérica aceitando assim a utilização de outros delimitadores; no exemplo a seguir estamos usando a vírgula como delimitador:
Private Sub btnAplicarSplit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAplicarSplit.Click ' Vamos separar esta string Dim str As String = txtStringEntrada.Text Dim separador() As Char 'definindo o separador a ser usado If txtDelimitador.Text = String.Empty Then separador = New Char() {" "c} Else separador = New Char() + txtDelimitador.Text.ToCharArray End If ' Separa string baseado no delimitador Dim palavras As String() = str.Split(separador) ' Percorremos as palavras da strings separadas exibindo-as no ListBox lstResultado.Items.Clear() Dim palavra As String For Each palavra In palavras lstResultado.Items.Add(palavra) Next End Sub |
Ainda podemos usar o parâmetro opcional StringSplitOptions.RemoveEmptyEntries que remove o valor string vazia do array de elementos. A sintaxe da linha para separar a string ficaria assim: (Quando não informada é usada o valor None)
palavras = str.Split(separador, StringSplitOptions.RemoveEmptyEntries)
Outro recurso muito útil é usar o recurso Regex.Split que separa uma string de entrada em posições definidas onde o delimitador é determinado por um modelo de expressão regular.
Para utilizar este método precisamos usar o namespace: Imports System.Text.RegularExpressions
No exemplo a seguir vamos usar o método Regex.Split para extrair palavras de um string onde devemos tratar a pontuação e os demais caracteres que não sejam palavras de forma que não sejam considerados.
Private Sub btnRegexSplit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRegexSplit.Click ' Vamos separar esta string Dim palavras As String() = SepararPalavras(txtStringEntrada.Text) ' Percorremos as palavras da strings separadas exibindo-as no ListBox lstResultado.Items.Clear() Dim palavra As String For Each palavra In palavras lstResultado.Items.Add(palavra) Next End Sub ''' <summary> ''' Separa as palavras na string ''' </summary> Private Function SepararPalavras(ByRef texto As String) As String() 'retorna a string de palavras separadas com base na expressão regular Dim expr_regex As String = txtRegex.Text.Trim() Return Regex.Split(texto, expr_regex) End Function |
- Neste código estamos chamando a
função SepararPalavras com o texto informado
na caixa de texto
- A função utiliza o método Regex.Split que
usa a expressão regular informada na caixa de texto txtRegex.
A expressão regular \W+ indica que '1 ou mais caracteres
especiais e espaço' de
forma que esses caracteres serão usados como delimitadores. Isso
implicará que somente as palavras serão separadas.
No resultado estamos usando um trecho de um poema de Fernando Pessoa e como resultado vemos todas as palavras, sem qualquer acentuação usada no texto, sendo exibidas como separadas.
O método Regex.Split possui muitos recursos, e um deles, é usar grupos de captura que podem ser usados na expressão Regex.Split, fazendo isso o resultado final da separação irá incluir o grupo de captura usado.
No exemplo abaixo vemos um exemplo desse recurso:
Dim
rgx As New Regex("(-)") Dim s As String() = rgx.Split("erva-de-santa-maria") |
Resultado
da separação : erva - de - santa - maria |
O retorno será um array contendo os seguinte elementos: "erva", "-", "de", "-", "santa", "-", "maria"
Creio que esta pequena introdução você já poderá saber como usar a função Split para separar strings em seus projetos.
Pegue o projeto completo aqui: FuncaoSplit.zip
Eu sei é apenas VB .NET, mas eu gosto...
Referências: