Что случилось с этой строкой формата?

У меня есть строка вроде этого:

<string name="q_title" formatted="false">Item %d of %d</string> 

Я использую его в String.format следующим образом:

 String log = String.format(getString(R.string.q_title), 100, 500); 

До сих пор я не видел проблем с выходом.

Однако проверка кода в Android Studio дает мне:

Строка формата «q_title» не является допустимой строкой формата, поэтому ее нельзя передавать в String.format

Зачем?

Solutions Collecting From Web of "Что случилось с этой строкой формата?"

Ваша строка должна быть

 <string name="q_title" formatted="false">Item %1$d of %2$d</string> 

И код

 String log = getString(R.string.q_title, 100, 500); 

Когда у вас есть несколько аргументов, вам нужно пометить их 1 $, 2 $ … n $. В арабском языке порядок меняется, поэтому им нужно знать, как правильно его изменить.

getString(id, args...) выполняет сам по себе формат.

Для процентов я работал для меня.

 <string name="score_percent">%s%%</string> getString(R.string.score_percent,"20") 

Если вы имеете дело с целыми числами, замените s на d

 <string name="score_percent">%d%%</string> 

Для тех, кто все еще ищет этот ответ, в качестве ссылки, которую предположил Блэкбелт , правильный формат для строки будет:

 <string name="q_title">Item %1$d of %2$d</string> 

Остерегайтесь избегать всех специальных символов

У меня была проблема с этой строкой, потому что я забыл избежать процентного символа «%» в конце.

 <string name="market_variation_formatter">%s %</string> 

Хорошая экранированная строка была:

 <string name="market_variation_formatter">%s \%</string>