2
respostas

Função String.replace() não funciona como o esperado.

Olá a todos,

Estou tendo problemas ao usar a função replace na Extension Function formataParaBrasileiro da classe BigDecimal.

Quando tento utilizar o replace conforme a indicação na aula:

import java.math.BigDecimal
import java.text.DecimalFormat
import java.util.*

fun BigDecimal.formataParaBrasileiro(): String {

    val decimalFormat = DecimalFormat
            .getCurrencyInstance(Locale("pt", "BR"))
    val valorFormatado = decimalFormat.format(this).replace("-R$ ", "R$ -")

    return valorFormatado

}

Não ocorre o replace removendo o espaço em branco após o cifrão. Entretanto, caso eu remova o espaço em branco do parâmetro oldValue (de "-R$ " para "-R$") o replace ocorre, mas não tenho o mesmo resultado da aula pois fica um espaço entre o sinal de negativo e o valor formatado.

Cheguei a testar o mesmo caso no https://play.kotlinlang.org/ e lá tenho o mesmo retorno que acontece durante a aula. Será que tenho algum tipo de configuração no meu Android Studio que esteja influenciando no resultado?

2 respostas

Fala Vitor, de boa?

Cara será que tem algo haver com sua implementação ?

Olhei a do instrutor e vi que tá um pouco diferente da sua:

fun BigDecimal.formataParaBrasileiro() : String {
    val formatoBrasileiro = DecimalFormat
            .getCurrencyInstance(Locale("pt", "br"))
    return formatoBrasileiro
            .format(this)
            .replace("R$", "R$ ")
            .replace("-R$ ", "R$ -")
}

Salve, Matheus, tudo certo?

Cara, eu acredito não ter a ver com a implementação, só alterei o nome da variável e acrescentei mais uma.

Além disso, o primeiro replace:

.replace("R$", "R$ ")

Não se faz necessário mais pois o DecimalFormat já dá esse espaço quando aplico o método format.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software