Die Formatzeichenfolge XXX ist keine gültige Formatzeichenfolge und sollte daher nicht an String.format übergeben werden

Lesezeit: 4 Minuten

Ich habe eine Android-App und diese Zeichenfolge in den Ressourcen:

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

Dies wird von fragment aufgerufen:

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

aber ich habe Fehler:

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

Ich kann nicht verstehen, was ist falsch? Wenn ich die App starte, zeigt sie mir buchstäblich “Wählen Sie bis zu %1$d Personen aus!”

  • Irgendwelche Namenskollisionen mit ‘create_group_select_people’? die Saite sieht echt aus

    – Borowis

    23. November 2016 um 13:44 Uhr


  • Borys, keine Namenskollisionen im Projekt

    – Wackalon

    24. November 2016 um 6:33 Uhr

  • Ja, ich vermute, dass etwas mit der IDE nicht stimmt. schön, dass es bei dir funktioniert hat

    – Borowis

    24. November 2016 um 9:51 Uhr

  • Übrigens erhalten Sie die gleiche Fehlermeldung, wenn Sie (Tag using for translation strings) im String verwenden

    – Daniel

    24. April 2018 um 8:23 Uhr

Benutzeravatar von ohdroid
Ohdroid

Ich habe den Code einfach kopiert und es funktioniert gut. Sie müssen also möglicherweise an einem anderen Ort nachsehen. Hier sind meine Vorschläge.

  1. sauberes Projekt
  2. Überprüfen Sie mehrsprachige Dateien
  3. oder verwenden Sie einfach String.format, wie andere sagten

  • Clean Build hat bei mir funktioniert. Warum funktioniert das, weißt du? Was im ersten Moment schief gelaufen ist.

    – COYG

    18. August 2018 um 10:26 Uhr

  • Nummer 2 hat es für mich getan. Zuerst dachte ich, es gäbe ein Problem mit Lint, weil ich dieselbe Warnung dreimal sah, aber es stellte sich heraus, dass es eine für jede der Sprachen war, in der die Zeichenfolge nicht richtig formatiert war

    – Nicolás Carrasco-Stevenson

    19. Dezember 2018 um 10:26 Uhr

  • Bei anderen bin ich mir nicht sicher, aber für mich gibt es ein Problem mit dem Prozentzeichen (%), das möglicherweise mit Unicode zusammenhängt. Es sollte ein kleines Symbol (compart.com/en/unicode/U+FE6A) nicht das große Symbol (compart.com/en/unicode/U+0025). Hoffe das hilft 🙂

    – Chitrang

    25. Juni 2019 um 20:06 Uhr

  • Für mich musste ich Option 2 überprüfen: Überprüfen Sie mehrsprachige Dateien

    – Botanik

    16. Mai 2020 um 12:57 Uhr

  • Wenn Sie ein Prozentzeichen haben, müssen Sie es als maskieren %%. Sie müssen keine ungewöhnliche Unicode-Variante von Prozent verwenden, wie @Chitrang vorschlägt, und wenn Sie dies tun, stellen Sie möglicherweise fest, dass sie in einigen Schriftarten fehlt.

    – Alex Vogel

    24. August 2020 um 17:26 Uhr

Setzen Sie den formatierten Parameter in Ressourcen auf „true“:

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

und so verwenden:

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

oder so:

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

Hinweis: Das formatted-Flag sollte nur für Zeichenfolgen mit Platzhaltern auf „true“ gesetzt werden

  • Das hat es für mich getan. Aus irgendeinem Grund musste ich das Starten Sie Android Studio neu um die Fehlermeldung zu entfernen.

    – Benutzer

    26. Februar 2020 um 17:24 Uhr


Dieser Fehler wird angezeigt, wenn Sie dieselbe Zeichenfolge in mehreren Zeichenfolgendateien (Übersetzungen) haben, aber eine davon nicht das richtige Format hat, z. B. fehlendes „%s“ oder „%1$s“, das zum Platzieren von Parametern verwendet wird übergeben (zB: “countMax”) in der unteren Zeile.

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

Bitte überprüfen Sie dies, bevor Sie andere oben genannte Antworten versuchen.

  • manchmal vergessen andere, was die Bedeutung des zweiten Parameters ist

    – Yohanim

    17. März 2021 um 5:02 Uhr


  • hat geklappt, danke 🙂

    – nesibeyjubov

    22. Dezember 2021 um 13:55 Uhr

Versuchen File -> Invalidate Caches / Restart...es hat das Problem für mich behoben.

Für andere, die diesen Thread finden könnten, ist eine mögliche Ursache für diese Warnung, dass Sie mehrere Sprachen in String-Ressourcendateien definiert haben und Sie in einer oder mehreren von ihnen keine Formatargumente angegeben haben.

Wenn Sie beispielsweise eine strings.xml-Datei in Ihrem Werteordner und eine andere strings.xml-Datei in Ihrem Werteordner haben, aber der strings.xml-Datei in Ihrem Werteordner nur Formatargumente hinzugefügt haben, wird die Warnung ausgelöst, weil des Fehlens von Formatargumenten in der Zeichenfolgenressource von strings.xml in Ihrem Ordner „values-es“.

Benutzeravatar von Shadow Droid
Schattendroide

Du brauchst String-Formatierer. Bitte ändern Sie den folgenden Code von

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

zu

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

Für weitere Detailinformationen verweisen

Benutzeravatar von Stephen Rauch
Stephan Rauch

Versuchen Sie, ein „sauberes Projekt“ durchzuführen, gefolgt von einem Schließen und erneuten Öffnen von Android Studio.

Das hat es für mich behoben, es sieht aus wie ein kleiner Fehler in Android Studio /Lint.

1393930cookie-checkDie Formatzeichenfolge XXX ist keine gültige Formatzeichenfolge und sollte daher nicht an String.format übergeben werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy