문자열 리소스 파일의 형식 문


147

다음과 같이 일반적인 strings.xml 리소스 파일에 문자열이 정의되어 있습니다.

<string name="hello_world"> HELLO</string>

아래와 같은 형식 문자열을 정의 할 수 있습니까?

 result_str = String.format("Amount: %.2f  for %d days ",  var1, var2);

strings.xml 리소스 파일에서

특수 문자를 이스케이프하려고했지만 작동하지 않습니다.


1
아래 방법으로 시도 할 수 있습니다 : mTextView.setText (String.format ( "Score :"+ "% 1 $ s", runs)); int runs = 100;
Ganesh

답변:


264

formatted="false"XML에서 사용할 필요는 없습니다 . 짧은 버전 (예 : 또는 )이 아닌 정규화 된 문자열 형식 마커 %[POSITION]$[TYPE](여기서 [POSITION]특성 위치 [TYPE]는 변수 유형 임) 만 사용하면 됩니다.%s%d

안드로이드 문서 에서 인용 : 문자열 형식화 및 스타일링 :

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

이 예제에서 형식 문자열에는 두 개의 인수 %1$s가 있습니다. 문자열이고 %2$d10 진수입니다. 다음과 같이 애플리케이션의 인수로 문자열을 형식화 할 수 있습니다.

Resources res = getResources();
String text = res.getString(R.string.welcome_messages, username, mailCount);

1
java.util.IllegalFormatConversionException이 발생합니다. $ d를 사용할 때 % d는 java.lang.Double 인수를 형식화 할 수 없습니다 $ d는 정수라고 생각합니다
user1634451

6
다음은 모든 다른 변환기 목록입니다. 숫자 유형에 적합한 것을 선택해야합니다. % f (부동 소수점의 경우)가 필요할 수 있습니다. docs.oracle.com/javase/1.5.0/docs/ api / java / util / Formatter.html
LocalPCGuy

2
res.getString (R.string.welcome_messages, username, mailCount)이 작업을 수행합니다. 자원 / 컨텍스트의 getString 메소드는 형식화 기능을 포함합니다.
SkyOasis

104

formatted="false"문자열 리소스에 추가해야 합니다


여기에 예가 있습니다

당신의 strings.xml:

<string name="all" formatted="false">Amount: %.2f%n  for %d days</string>

귀하의 코드에서 :

yourTextView.setText(String.format(getString(R.string.all), 3.12, 2));

6
문자열 형식 지정에 대한 문서에 따르면 필요하지 않습니다. developer.android.com/guide/topics/resources/…
Squonk

그것은 해결하는 한 가지 방법이지만 formatted="false"문자열이 형식화되지 않았 음을 암시 하기 때문에 일부와 혼동 될 수 있습니다 . 다른 솔루션을 게시했습니다 stackoverflow.com/a/20887690/228429
LocalPCGuy

18
String.format(getString(R.string.all), 3.12, 2)이 방법을 단순화 할 수 있습니다 getString(R.string.all, 3.12, 2).
patryk.beza

이 페이지의 모든 답변에 큰 문제가 있습니다. 매개 변수 바로 옆에 퍼센트 기호를 추가 해야하는 경우 25%Android가 중단됩니다.
Henrique de Sousa

2
두 개의 %%를 포함시켜 퍼센트 부호를 벗어날 수 있습니다. 다음은 표준 형식화 구문입니다. 예 : String.format ( "% d %% 또는 float % .2f %%", 12, 12.34f); 문자열 "비율 12 % 또는 float로 12.34 %"생성
LanDenLabs

14

내부 파일은 strings.xml다음과 같은 문자열 리소스를 정의합니다.

<string name="string_to_format">Amount: %1$f  for %2$d days%3$s</string>

코드 내에서 (Context에서 상속한다고 가정) 간단히 다음을 수행하십시오.

 String formattedString = getString(R.string.string_to_format, floatVar, decimalVar, stringVar);

LocalPCGuy 또는 Giovanny Farto M 의 답변과 비교 하여 String.format 메서드는 필요하지 않습니다.


9

안드로이드 문서 에서 인용 :

을 사용하여 문자열을 형식화해야하는 경우 문자열 String.format(String, Object...)인수에 형식 인수를 넣어서 수행 할 수 있습니다. 예를 들어 다음 리소스를 사용하십시오.

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

이 예제에서 형식 문자열에는 두 개의 인수 %1$s가 있습니다. 문자열과 %2$d10 진수입니다. 다음과 같이 애플리케이션의 인수로 문자열을 형식화 할 수 있습니다.

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

0

나를 위해 Kotlin에서 다음과 같이 작동했습니다.

내 string.xml

 <string name="price" formatted="false">Price:U$ %.2f%n</string>

내 수업 .kt

 var formatPrice: CharSequence? = null
 var unitPrice = 9990
 formatPrice = String.format(context.getString(R.string.price), unitPrice/100.0)
 Log.d("Double_CharSequence", "$formatPrice")

D / Double_CharSequence : 가격 : U $ 99,90

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.