文字列の末尾または先頭、あるいはその両方にスペースを保持する方法は?


359

リソース/値ファイルからこれらの2つの文字列を連結する必要があります。

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2"> flips !</string>

私はこのようにします:

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+total_flips+getString(R.string.Toast_Memory_GameWon_part2);

Toast.makeText(this, message_all_pairs_found, 1000).show();

ただし、最初の文字列の末尾と2番目の文字列の先頭のスペースが消えています(トーストが表示されている場合)...

私は何をすべきか ?

答えはこのドキュメントのリンクのどこかにあると思います

または&amp ;、「&」文字に使用するようなものですか?


2
良い答えはいくつかありますが、どれもうまくいきません(私のコメントを参照)。賞金は、文字列リソースの最初または最後の文字として実際のスペース文字(U + 0020)を取得する方法を提供するすべての回答に対するものです。
Thomas

3
Nasty
nasty

回答:


502

文字列フォーマットを使用していても、文字列の最初または最後に空白が必要な場合があります。これらの場合、でエスケープして\も、xml:space属性でも役立ちません。&#160;空白にはHTMLエンティティを使用する必要があります。

&#160;改行できない空白文字に使用します。通常のスペースに
使用&#032;します。


12
この種の動作はしますが、通常のスペースの代わりに改行しないスペース(U + 00A0)を挿入します。これは、状況によっては望ましくない場合があります。
Thomas

50
&#160が機能しません... xmlエディターでエラーが発生し、プロジェクトをビルドできません... \ u0020は正常に機能します!
jcamacho 2013

10
最後にセミコロン(;)を追加する必要があります。
user1010160 2015

36
通常、\ u0020がより良い解決策です。&#032; htmlを解析する必要があり、場合によってはランダムに無視されてスペースがなくなることがあります
HaydenKai

5
Android Studio 3.2をAPI 25エミュレーターにデプロイする場合、を使用しましたが&#032;、ビルドエラーは発生しませんでしたが、スペースは無視されました。&#160;動作しましたが、改行できない空白文字は必要ありません。普通のスペースが欲しいです。\u0020働いた。
ヒースボーダーズ

490

同じ問題が発生しました。画面上のフィールド名を表すリソース文字列の最後に空白を残したいと思いました。

この問題レポートで解決策を見つけました:https : //github.com/iBotPeaches/Apktool/issues/124

これはDuessiが提案するのと同じ考えです。\u0020保存したい空白のXMLに直接挿入します。

例:

<string name="your_id">Score :\u0020</string>

置き換えはビルド時に行われるため、ゲームのパフォーマンスには影響しません。


よく働く。&#160;との違いは何ですか?
Android開発者

3
@androiddeveloper、\ uは、Unicode文字をエスケープシーケンスとして示します(ファイル内のUnicode文字ではありません)。&#nnn; htmlエンティティを示します。つまり、html解析されるxml文字列に依存していることを意味します(テキストビューで使用される場合、デフォルトで使用されます)。w3schools.com/html/html_entities.aspを
greg7gkb

@ greg7gkb興味深いですが、それがデフォルトであることを知りませんでした。文字列リソースで「setText」を使用すると、同じように機能するということですか?
Android開発者

@androiddeveloperはい、コードでこれを確認しました。文字列xmlファイルにhtmlエンティティを含めることができ、デフォルトでsetText(int resId)を使用して変換されます。例:<string name = "test"> T&#160; S&#160; T&#160; </ string>。
greg7gkb 2014年

5
\u0020ASCIIコードのスペースです。ASCIIであることを確認する必要があったので、これは私のプロジェクトにとって最良の選択でした。
OneWorld 2014年

138

このドキュメントは引用が機能することを示唆しています:

<string name="my_str_spaces">" Before and after? "</string>

2
保証しますか<string name="my_str_spaces">" Before <b>and</b> after? "</string>
Prateek 2013年

5
ユニコード文字を使用するよりもこのように!ありがとう!
Sumit Anantwar、2015年

2
残念ながら、Passoloなどの一部のローカリゼーションツールは、引用の前に自動的にスラッシュを追加します。そして、文字列は次のようになります:<string name = "my_str_spaces"> \ "Before and after?\" </ string>。したがって、この引用はテキストで表示されます。したがって、この場合は\ u0020を使用する方が良いようです。
フォックス

これはドキュメントのどこにも記載されていません。私が見ることができる最も近いのはEnclose the entire string in double quotes ("This'll work", for example)、エスケープについて議論しているところSingle quote (')です。
ヒース境界線

これは私にはうまく
いき

38

私は、strings.xmlファイルのスペース "\ u0020"にUTFコードを使用します。

<string name="some_string">\u0020The name of my string.\u0020\u0020</string>

よく働く。(AndroidはUTFコードを愛しています)


2
これは私にとってはうまくいきましたが、受け入れられた答えはうまくいきませんでした。
ランス

1
既存の答えに新しいものはありますか?
user905686 2017

21

この質問は古いかもしれませんが、現時点では、引用符を追加するのが最も簡単な方法です。例えば:

<string name="Toast_Memory_GameWon_part1">"you found ALL PAIRS ! on "</string>
<string name="Toast_Memory_GameWon_part2">" flips !"</string>

これは完全に機能します。引用符「あなたのテキスト」で希望のテキストを囲むだけ
Tarun Kumar

10

異なる幅の間隔を空けることができます:

<string name="space_demo">|&#x20;|&#x2009;|&#x200A;||</string>

| スペース| 薄いスペース| ヘアスペース| スペースなし|

視覚化:

ここに画像の説明を入力してください


8

あなたがそれをあなたがやった方法で本当にやりたいのであれば、私はあなたがそれをエスケープすることによって空白が関連していることをあなたにそれを伝えなければならないと思う:

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on\ </string>
<string name="Toast_Memory_GameWon_part2">\ flips !</string>

ただし、これには文字列フォーマットを使用します。次のようなもの:

<string name="Toast_Memory_GameWon">you found ALL PAIRS ! on %d flips !</string>

その後

String message_all_pairs_found = String.format(getString(R.string.Toast_Memory_GameWon), total_flips);

1
バックスラッシュによるエスケープは機能しません(少なくとも私にとっては)。書式文字列を使用することは、一般に優れたソリューションですが、常にそうであるとは限りません。たとえばString.format、ゲームでは望ましくない多くのメモリ割り当てが発生します。
Thomas

スペースをエスケープする(「\」を使用)ことも、私にはうまくいきませんでした。
Android開発者

書式設定は、テキストがすべて同じスタイルで表示されている場合にのみ機能します。私の場合、結合されている2つの要素は、通常の色と異なる色の太字です。

5

文字列リソース値には「」を使用します。

例:「スペースのある値」

または

スペースには\ u0020コードを使用します。


4

私は\ u0020を使用しています

<string name="hi"> Hi \u0020 </string>
<string name="ten"> \u0020 out of 10  </string>
<string name="youHaveScored">\u0020 you have Scored \u0020</string>

Javaファイル

String finalScore = getString(R.string.hi) +name+ getString(R.string.youHaveScored)+score+ getString(R.string.ten);
               Toast.makeText(getApplicationContext(),finalScore,Toast.LENGTH_LONG).show();

スクリーンショットは こちらこのコードの動作を示す画像


2

プログラムによってスペースを追加することについて、議論をすることができます。これらのケースは連結で頻繁に使用されるため、狂気を止めて古いものだけを実行することにしました+ " " +。これらはほとんどのヨーロッパ言語で意味をなすと思います。


1

ここでのすべての答えは私にとってうまくいきませんでした。代わりに、文字列の最後にスペースを追加するにXMLは、これを行いました

<string name="more_store">more store<b> </b> </string>

0

特にAndroidについては知りませんが、これは通常のXMLの空白処理のように見えます-要素内の先頭と末尾の空白は、一般的に重要ではないと見なされて削除されます。試してくださいxml:space

<string name="Toast_Memory_GameWon_part1" xml:space="preserve">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2" xml:space="preserve"> flips !</string>

残念ながら、xml:space無視されているようです。
Thomas

0

これは実際には質問(XMLで空白を保持する方法)に答えない場合がありますが、根本的な問題をより適切に解決する可能性があります。

XMLリソースのみに依存する代わりに、フォーマット文字列を使用して連結します。したがって、まず空白を削除します

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on</string>
<string name="Toast_Memory_GameWon_part2">flips !</string>

次に、別の方法で文字列を作成します。

String message_all_pairs_found = 
      String.format(Locale.getDefault(), 
                    "%s %d %s", 
                    getString(R.string.Toast_Memory_GameWon_part1),
                    total_flips,
                    getString(R.string.Toast_Memory_GameWon_part2);

Toast.makeText(this, message_all_pairs_found, 1000).show();

0

を使用するソリューションもありCDATAます。例:

<string name="test"><![CDATA[Hello          world]]></string>

しかし、一般的に\u0020は十分だと思います。


-1

後で他の文字列と連結する目的でスペースが必要な場合は、文字列定義に引数を追加する文字列フォーマットアプローチを使用できます。

<string name="error_">Error: %s</string>

次に、文字列をフォーマットします(たとえば、サーバーからエラーが返された場合は、を使用しますgetString(R.string.string_resource_example))。

String message = context.getString(R.string.error_, "Server error message here")

その結果:

Error: Server error message here

-6

xml:space = "preserve"では機能しません

だから私はそれを最速の方法でやった=>

必要な場所に+ "" +を追加しただけです...

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);

2
いくつかのJava文字列リテラルを混ぜるだけの場合、リソースを使用する意味は何ですか?
クリストファージョンソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.