La cadena de formato XXX no es una cadena de formato válida, por lo que no debe pasarse a String.format

4 minutos de lectura

Tengo una aplicación de Android y esta cadena en recursos:

<string name="create_group_select_people">Select up to %1$d people!</string>

Esto se llama desde el fragmento:

Integer countMax = 5; //also tried just "int" - nothing changed
getResources().getString(R.string.create_group_select_people, countMax);

pero tengo un error:

Format string 'create_group_select_people' is not a valid format string so it should not be passed to String.format

No puedo entender lo que está mal? Cuando inicio la aplicación, me muestra literalmente “¡Seleccione hasta %1$d personas!”

  • ¿Alguna colisión de nombres con ‘create_group_select_people’? la cadena parece legítima

    – borowis

    23 de noviembre de 2016 a las 13:44


  • Borys, sin colisiones de nombres en el proyecto

    – Wacaloon

    24 de noviembre de 2016 a las 6:33

  • sí, supuse que algo andaba mal con el IDE. gustoso de trabajar para ti

    – borowis

    24 de noviembre de 2016 a las 9:51

  • Por cierto, recibirá el mismo mensaje de error si usa (etiqueta que se usa para cadenas de traducción) en la cadena

    – Daniel

    24 de abril de 2018 a las 8:23

avatar de usuario
ohdroid

Acabo de copiar el código y funciona bien. por lo que es posible que deba consultar en otro lugar. Estas son mis sugerencias.

  1. proyecto limpio
  2. comprobar archivos en varios idiomas
  3. o simplemente use String.format como dijeron otros

  • La compilación limpia funcionó para mí. ¿Por qué funciona este trabajo? Lo que salió mal en primera instancia.

    – COYG

    18 de agosto de 2018 a las 10:26

  • El número 2 lo hizo por mí. Al principio pensé que había un problema con lint porque veía la misma advertencia tres veces, pero resultó que era uno para cada uno de los idiomas en los que la cadena no tenía el formato correcto.

    – Nicolás Carrasco-Stevenson

    19 de diciembre de 2018 a las 10:26

  • No estoy seguro de los demás, pero para mí, hay un problema con el símbolo de porcentaje (%) que puede estar relacionado con Unicode. Debe haber un pequeño símbolo (compar.com/en/unicode/U+FE6A) no el gran símbolo (compar.com/en/unicode/U+0025). Espero que esto ayude 🙂

    – Chitrang

    25 de junio de 2019 a las 20:06

  • Para mí, necesitaba verificar la opción 2: comprobar archivos en varios idiomas

    – botanga

    16 mayo 2020 a las 12:57

  • Si tiene un signo de porcentaje, debe escaparlo como %%. No necesita usar una variante Unicode inusual de porcentaje como sugiere @Chitrang, y si lo hace, es posible que falte en algunas fuentes.

    – pájaro alex

    24 de agosto de 2020 a las 17:26

Establezca el parámetro formateado en verdadero en los recursos:

<string name="some_text" formatted="true">
    Use for String.format method. Parameter one: %s1
</string>

y usar de esta manera:

String.format(context.getString(R.string.some_text,"value 1"))

o de esta manera:

context.getString(R.string.some_text,"value 1"))

Nota: la bandera formateada debe establecerse en verdadero solo para cadenas con marcadores de posición

  • Esto lo hizo por mí. Por alguna razón, necesitaba reinicie Android Studio para eliminar el mensaje de error.

    – Usuario

    26 de febrero de 2020 a las 17:24


Este error se mostrará si tiene la misma cadena en varios archivos de cadenas (traducciones), pero uno de ellos no tiene el formato adecuado, como “%s” o “%1$s”, que se usarán para colocar parámetros. pasado (por ejemplo: “countMax”) en la línea de abajo.

getResources().getString(R.string.create_group_select_people, countMax)

Por lo tanto, verifique eso antes de intentar cualquier otra respuesta mencionada anteriormente.

  • a veces otros olvidan cuál es el significado del segundo parámetro

    – Yohanim

    17 de marzo de 2021 a las 5:02


  • funcionó, gracias 🙂

    – nesibeyyubov

    22 de diciembre de 2021 a las 13:55

Probar File -> Invalidate Caches / Restart...me solucionó el problema.

Por el bien de otros que puedan encontrar este hilo, una posible causa de esta advertencia es que tiene varios idiomas definidos en archivos de recursos de cadena y no especificó argumentos de formato en uno o más de ellos.

Por ejemplo, si tiene un strings.xml en su carpeta de valores y otro strings.xml en su carpeta de valores-es, pero solo agregó argumentos de formato a strings.xml en su carpeta de valores, entonces la advertencia se activará porque de la falta de argumentos de formato en el recurso de cadena de strings.xml en su carpeta de valores-es.

avatar de usuario
Droide de sombra

Necesitas Formateador de cadenas. Cambie el código a continuación de

 getResources().getString(R.string.create_group_select_people, countMax);

a

String temp =  String.format(getResources().getString(R.string.create_group_select_people), countMax);

Para más información detallada referirse

avatar de usuario
Esteban Rauch

Intente hacer un ‘proyecto limpio’ seguido de un cierre y reapertura de Android Studio.

Eso lo arregló para mí, parece un error menor de Android Studio/Lint.

¿Ha sido útil esta solución?