Trabalhando com String no Scala


Neste post iremos aprender a trabalhar um pouco com String no Scala. ## Declaração Já vimos nos posts anteriores como declaramos uma variável do tipo String. Podemos fazer de duas formas basicamente:

1) Especificando o Tipo

val name: String = "Diego"

2) Omitindo o tipo, deixando que o Scala determine automaticamente o tipo.

val name = "Diego"

Funções úteis

#### Capturando um caracter dentro de uma StringPara capturar um caracter, basta informar o indice que o caracter está posicionado. Podemos fazer isso de 3 formas:

val name = "Diego"
println(name(0))
println(name(1))
println(name(2))

Utilizando o método apply:

val name = "Diego"
println(name.apply(0))
println(name.apply(1))
println(name.apply(2))

Ou utilizando o método charAt:

val name = "Diego"
println(name.charAt(0))
println(name.charAt(1))
println(name.charAt(2))

Transformando o primeiro caracter em maiúsculo

Para isso iremos utilizar o método capitalize:

val name = "diego"
println(name.capitalize)

Comparando Strings

Para compararmos exatamente duas Strings, com distinção de letras maiúsculas e minúsculas, utilizamos o método == ou compareTo:

"Diego" == "diego" // false
"Diego".compareTo("diego") // -32

"Diego" == "Diego" // true
"Diego".compareTo("Diego") // 0

Reparem que o método compareTo retorna um Int, onde se for igual a 0 quer dizer que as Strings são iguais.

Podemos também comparar duas Strings, ignorando letras maiúsculas e minúsculas:

"Diego".compareToIgnoreCase("diego") // 0

"Diego".compareToIgnoreCase("Nogueira") // -10

Seguindo a mesma idéia do método compareTo, onde 0, significa que as Strings são iguais. #### Concatenando Strings Podemos fazer de algumas formas:

Utilizando o método +:

"Diego" + " " + "Nogueira"

Utilizando o método concat:

"Diego".concat(" ").concat("Nogueira")

Ou utilizando interpolação:

val first_name = "Diego"
val last_name = "Nogueira"

val full_name = s"$first_name $last_name"

Para trabalharmos com interpolação, basta adicionar s antes da string e concatenar utilizando o caracter $. Podemos também utilizar blocos de código ${ } para fazer a interpolação:

val first_name = "Diego"
val last_name = "Nogueira"

val full_name = s"${ first_name + " " + last_name } - ${ 1 + 1 }"

Bloco de String

Muitas vezes precisamos definir uma String um tanto grande. Colocar tudo na mesma linha, sem nenhuma indentação, pode ser uma tarefa meio complicada de se escrever e de dar manutenção futuramente. O Scala assim como outras linguagens, permitem definirmos um bloco de String, vejamos:

val description = """
 Essa
   é
     uma
       demostração
         de String
"""

Delimitamos nosso bloco de String, utilizando três aspas ”"”. Note que ele irá respeitar a marge que definimos.

Podemos também, informar qual é o nosso delimitador de margem, com o método stripMargin:

val description = """
 |Essa
  |é
    |uma
      |demostração
        |de String
""".stripMargin

O método stripMargin é responsável por contar as margens da nossa String. Vejam que nossa String possui vários caracteres “|”. São eles que indicam até onde será cortado cada linha de nossa String. #### Checando a existência de caracteres numa String Para verificarmos se existem um ou mais caracteres dentro de uma String, utilizamos o método contains:

val name = "Diego Nogueira"
name.contains("go") // true

name.contains("Go") // false

Note que o método contains faz distinção de letras maiúsculas e minúsculas. #### Contando quantos caracteres existem em uma String Utilizamos o método length:

"Diego".length

Removendo caracteres duplicados em uma String

Podemos utilizar o método distinct para remover os caracteres duplicados:

"abbca".distinct

Removendo caracteres de uma String

O método drop, permite que removamos da esquerda pra direita, uma certa quantidades de caracteres informada via parâmetro, vejamos:

"Diego Nogueira".drop(1)
"Diego Nogueira".drop(2)
"Diego Nogueira".drop(5)

Já o método dropRight, remove caracteres da direita pra esquerda:

"Diego Nogueira".dropRight(1)
"Diego Nogueira".dropRight(2)
"Diego Nogueira".dropRight(5)

Varrendo caracter a caracter em uma String

Podemos utilizar a estrutura foreach para varrermos caracter a caracter dentro de uma String:

"Diego Nogueira".foreach(println(_))

Veja que o símbolo _, representa o caracter em questão. Podemos omití-lo também, pois o foreach irá entender da mesma forma:

"Diego Nogueira".foreach(println)

Capturando o primeiro e último caracter de uma String

Utilizamos o método head para capturarmos o primeiro caracter. E o método last para o último:

"Diego Nogueira".head
"Diego Nogueira".last

Outros métodos

É isso ai galera! Esse post foi só uma introdução de como trabalhar com Strings, não irei abordar todos os métodos, até porque são vários… Para conhecer os métodos, bastar conferir a documentação oficial do Scala:

http://www.scala-lang.org/api/current/#scala.collection.mutable.StringBuilder

Até a próxima!