Hice un programa simple para aprender sobre la concatenación en Android Studio con Kotlin. Entonces, traté de obtener un valor de cadena de recursos en strings.xml como se muestra a continuación y concatenar con un valor
<string name="txt_show">Your lucky number is %1$s</string>Recibí la advertencia "No concatenar texto..." de getString
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val firstNumber = numEditText.text processButton.setOnClickListener { val result = concatText(firstNumber.toString().toDouble()) resultView.text = getString(R.string.txt_show, " ") + result.format(2) } } private fun concatText(myNumber: Double): Double { val luckyNumber = 1.79 return luckyNumber * myNumber } private fun Double.format(digits: Int) = java.lang.String.format("%.${digits}f", this)}Por reemplazo
resultView.text = getString(R.string.txt.show, " ") + result.format(2)con
val finalResult = result.toInt()<p> resultView.text = getString(R.string.txt_show, finalResult)<p> Y reemplace %1$s por %1$d en recursos de strings.xml
La advertencia desapareció pero tengo problemas, primero el resultado es un número entero que no es lo que esperaba. Debería ser el doble. En segundo lugar, agregar el formato de función en getString detendrá el programa con el mensaje "Error inesperado..." en la pantalla.
¿Como puedó resolver esté problema?
Si tiene una cadena con algunos marcadores de posición como:
<string name="price_string">Your price: %d</string>JAVA
String text = getString(R.string.price_string, 2.5);KOTLIN
val text = getString(R.string.price_string, 2.5).
Java :
// Read text String priceString = getString(R.string.price_string); // Fill it String output = String.format(priceString, 2.5);KOTLIN
// Read text val priceString = getString(R.string.price_string) // Fill it val output = String.format(priceString, 2.5) // or val output = priceString.format(2.5) Si tiene %s , debe completarlo con String . Aquí tienes más info: https://developer.android.com/guide/topics/resources/string-resource#formatting-strings
primero, el resultado es un número entero que no es lo que esperaba. Debería ser el doble.
Entonces, ¿por qué llamaste a toInt ? Solo usa
resultView.text = getString(R.string.txt_show, result) y %1$.2f (o simplemente %.2f ) en la cadena en lugar de %1$d para formatear un número fraccionario de dos dígitos. Puede ver que se especifica igual que en la función de format en su código. La documentación para las cadenas de formato (lo que significan todos estos %d , etc.) está en https://developer.android.com/reference/java/util/Formatter.html .