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.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more