DEV Community

Cover image for Tipos Básicos em Kotlin - String Literals
Renato O da Silva
Renato O da Silva

Posted on

Tipos Básicos em Kotlin - String Literals

Na última postagem eu comecei falar sobre strings e vamos dar continuidade falando de string literals.
Kotlin possui dois tipos de strings literals, Multiline Strings e Scaped Strings.

Multiline Strings

Diferente das strings convencionais, a multiline permite a adição de mais linhas dentro do texto. Se você tentar criar uma string com várias linhas, utilizando aspas duplas, isso irá gerar um erro.

fun main() {
    val texto = "
    Hoje é domingo
    Pede cachimbo
    O cachimbo é de barro
    Bate no jarro
    "

    println(texto)
}
Enter fullscreen mode Exit fullscreen mode

O código acima irá gerar vários erros conforme abaixo:

Syntax error: Expecting '"'.
Syntax error: Incorrect template entry: .
Unresolved reference 'Hoje'.
Unresolved reference 'domingo'.
Unresolved reference 'Pede'.
Unresolved reference 'O'.
Unresolved reference 'é'.
Unresolved reference 'barro'.
Unresolved reference 'Bate'.
Unresolved reference 'jarro'.
Syntax error: Expecting '"'.
Syntax error: Incorrect template entry: .
Enter fullscreen mode Exit fullscreen mode

Então o que fazemos quando precisamos imprimir um texto com múltiplas linhas? Utilizamos multiline strings:

fun main() {
    val texto = """
    Hoje é domingo
    Pede cachimbo
    O cachimbo é de barro
    Bate no jarro
    """

    println(texto)
    // Hoje é domingo
    //     Pede cachimbo
    //     O cachimbo é de barro
    //     Bate no jarro
}
Enter fullscreen mode Exit fullscreen mode

Repare que o texto mesmo estando formatado, gerou uma saída toda bagunçada. Uma maneira de resolver isso é utilizando o método ** trimMargin()** que pode ser utilizado para remover espaços em brancos quando estamos utilizando multiline strings:

fun main() {
    val texto = """
    |Hoje é domingo
    |Pede cachimbo
    |O cachimbo é de barro
    |Bate no jarro
    """.trimMargin()

    println(texto)
    // Hoje é domingo
    // Pede cachimbo
    // O cachimbo é de barro
    // Bate no jarro
}
Enter fullscreen mode Exit fullscreen mode

O Kotlin por padrão usa o símbolo "|" como prefixo para margem, mas podemos utilizar outro símbolo, apenas devemos indicar isso no método trimMargin():

fun main() {
    val texto = """
    ?Hoje é domingo
    ?Pede cachimbo
    ?O cachimbo é de barro
    ?Bate no jarro
    """.trimMargin("?")

    println(texto)
    // Aqui utilizamos a ? como prefixo, podendo ser outro caractere
    // Hoje é domingo
    // Pede cachimbo
    // O cachimbo é de barro
    // Bate no jarro
}
Enter fullscreen mode Exit fullscreen mode

Escaped Strings

Escaped strings podem conter caracteres escapados. Abaixo temos um exemplo:

fun main() {
    val saudacao = "Ola\nJosé"

    println(saudacao)
    // Ola
    // José
}
Enter fullscreen mode Exit fullscreen mode

Para utilizar escape, usamos o caractere *. Repare que a string está em uma linha só, mas na hora de imprimir na tela, foi impresso em duas linhas. O caractere *\n serve para pular uma linha e o mesmo não é impresso visualmente.
Temos uma lista de caracteres que podem ser escapados, conforme abaixo:

  • \t – tabulação
  • \b – backspace (não gostei dessa tradução, por isso deixei sem tradução)
  • \n – nova linha
  • \r – enter
  • \' – aspas simples
  • \" – aspas duplas
  • \ – barra inversa
  • \$ – Sinal de Dólar
fun main() {
    println("\tAqui temos uma tab")
    //  Aqui temos uma tab
    println("\bAqui temos um backspace")
    //Aqui temos um backspace 
    println("Aqui imprime uma nova linha\n")
    // Aqui imprime uma nova linha
    // 
    println("Aqui imprime um enter\r")
    // Aqui imprime um enter 
    println('\'')
    // '
    println("\"")
    // "
    println("Aqui imprime a barra inversa \\")
    // Aqui imprime a barra inversa \
    println("Aqui imprime o sinal de dólar \$")
    // Aqui imprime o sinal de dólar $
}
Enter fullscreen mode Exit fullscreen mode

Vou ficando por aqui, em breve continuaremos com as strings.

Top comments (0)