Groovy #2: String e GString

Tempo de leitura: menos de 1 minuto

Groovy #2: String e GString

Continuando o primeiro post sobre conceitos básico de Groovy, vamos hoje ver com o Groovy é poderoso para trabalhar com String. No Groovy é possível instanciar um objeto java.lang.String ou um groovy.lang.GString.

Mas qual a diferença? String é a mesma usada no Java, já a GString, também chamada de string interpolada, traz além dos recursos da String padrão, vários outros. O GString é o padrão para sequencia de caracteres no Groovy.

As formas mais conhecidas de trabalhar com String no Groovy são:

1) Aspas simples:

[code language=”groovy”]
def str = ‘Texto qualquer’
[/code]

Diferente do Java, quando usamos aspas simples do Groovy, estamos pedindo uma instancia de java.lang.String.

2) Aspas simples triplas:

[code language=”groovy”]
def str = ”’Texto qualquer.
Linha 1
Linha 2”’
[/code]

Esse formato é usado para criar String multi-linhas, como se estivesse usado \n em cada uma das linha.

3) Aspas duplas:

[code language=”groovy”]
def str = "Texto qualquer"
[/code]

Quando usamos aspas duplas, a instância será um GString. A grande vantagem de usar GString é a interpolação, ou seja, é possível adicionar variáveis dentro da String, dispensando a necessidade de concatenação.

No Java:

[code language=”java”]
float valor = 100.00;
System.out.println("O valor é " + valor + " reais");
[/code]

No Groovy:

[code language=”groovy”]def valor = 100.00
println "O valor é $valor reais"
println "O valor é ${valor} reais"[/code]

Existe duas formas de interpolação de valores dinâmicos no GString:

  1. $ – usado para variáveis simples.
  2. ${} – usado quando o valor é resultado de uma operação, retorno de um método por exemplo.

4) Aspas duplas triplas:

[code language=”groovy”]
def str ="""Texto qualquer.
Linha 1
Linha 2"""
[/code]

Funcionamento parecido com as aspas simples triplas, com a diferença de contar com a interpolação.

Importante: Ao comparar igualdade entre uma String e GString que possuem o mesmo valor, ou seja, a mesma sequência de caracteres, o resultado será falso. Isso porque o hashCode deles são diferentes, já que String é imutável. Veja um exemplo:

[code language=”groovy”]
println "one: ${1}".hashCode() +" != "+ "one: 1".hashCode()​​​​​​​
//Saída: -1012478518 != -1012478555
[/code]

Observação: Para comparar valor de String com GString, use o operador “==”, nunca o equals:

[code language=”groovy”]
println "teste${1}" //saída: teste1
println ‘teste’+1 //saída: teste1
println "teste${1}".equals(‘teste’+1) //saída: false
println "teste${1}" == ‘teste’+1 //saída: true
[/code]

Métodos úteis por padrão

Quando usamos Java puro, a class String disponibiliza poucos métodos para tratamento, muitas vezes dependemos de outras bibliotecas de utilitários para facilitar o tratamento de String. Uso muito o Apache Commons para esse fim, essa lib não pode faltar em um projeto Java, ajuda muito. A classe org.apache.commons.lang.StringUtils disponibiliza muitas facilidades.

No entanto, quando usamos a String ou GString no Groovy, é disponibilizado vários desse métodos utilitários de graça. Abaixo destaco alguns métodos legais:

  • capitalize e uncapitalize: Faz com que a primeira letra de uma String fique em maiúscula ou em minúsculo:

    [code language=”groovy”]
    assert ‘h’.capitalize() == ‘H’
    assert ‘hello world’.capitalize() == ‘Hello world’
    assert ‘string’ == String.class.simpleName.uncapitalize()
    [/code]

  • drop e dropWhile: corta uma String de frente para trás.

    [code language=”groovy”]
    def text = "Groovy"
    assert text.drop( 0 ) == ‘Groovy’
    assert text.drop( 2 ) == ‘oovy’
    assert text.dropWhile{ it != ‘v’ } == ‘vy’
    [/code]

  • find: localiza uma outra String dada uma regex.

    [code language=”groovy”]
    assert "10292" == "New York, NY 10292-0098".find(~/\d{5}/)
    assert null == "New York, NY".find(~/\d{5}/)
    [/code]

  • isLong, isFloat, isBoolean, etc…: retorna true quando a String for o tipo testado.
  • plus e minus: concatena duas String ou remove uma String da outra.

    [code language=”groovy”]
    assert "Eder" == "Ed" + "er"
    assert "Ed" == "Eder" – "er"
    [/code]

  • tr: tradutor, funciona com um replace.

    [code language=”groovy”]
    assert ‘hello’.tr(‘aeiou’, ‘AEIOU’) == ‘hEllO’
    assert ‘hello’.tr(‘z-a’, ‘Z-A’) == ‘HELLO’
    [/code]

E por aí vai… clique aqui conhecer todos o métodos disponíveis.

Observação: não é só com a String que o Groovy adiciona métodos utilitários, praticamente com todos as Classes Java isso ocorre.
Dica: sempre que trabalhar com o Groovy, e precisar criar um método utilitário, procure se o Groovy já disponibiliza algo para isso na própria classe.

Se gostaram do post, curtam ou comentem aqui em baixo.

Abraços pessoal, até a próxima.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *