2013-07-06 11 views
8

mam ciąg jak poniżej:Co jest nie tak z tym ciągiem formatu?

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

używam go w string.Format tak:

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

Jak dotąd nie obserwowano problemy z wyjściem.

Jednak inspekcja kodu w Android Studio daje mi:

format string 'q_title' nie jest prawidłowy ciąg formatu więc nie powinny być przekazywane do string.Format

dlaczego?

+0

spojrzeć [tutaj] (http://developer.android.com/guide/topics/resources/string-resource. html # FormattingAndStyling) – Blackbelt

+0

Co się stanie, jeśli usuniesz lewe ukośniki przed podwójnym cudzysłowem? – fge

+1

Czy mógłbyś zaktualizować swoje pytanie nowym ciągiem? – Blackbelt

Odpowiedz

14

ciąg powinien być

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

i kod

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

Gdy masz wiele argumentów, musisz oznaczyć je 1 $, 2 $ ... n $. W języku arabskim kolejność jest odwrotna, więc muszą wiedzieć, jak zmienić ją poprawnie.

getString(id, args...) wykonuje sam format.

2

Dla tych wciąż szuka tej odpowiedzi, jak link that Blackbelt posted wskazuje, poprawny format napisu byłoby:

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

Strzeż się uciec wszystkie znaki specjalne

miałem problem z tego łańcucha, bo zapomniał uciec znak procentu „%” na końcu.

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

Dobrą uciekł łańcuch był:

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

Dla procent, co następuje pracował dla mnie.

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


getString(R.string.score_percent,"20") 

Jeśli masz do czynienia z liczbami całkowitymi zastąpić przez s d

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