web-dev-qa-db-fra.com

Comment conserver les espaces à la fin et/ou au début d'une chaîne?

Je dois concaténer ces deux chaînes à partir de mes fichiers de ressources/valeurs:

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

Je le fais de cette façon:

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();

Mais les espaces à la fin de la première chaîne et au début de la deuxième chaîne Ont disparu (lorsque le Toast est affiché) ...

Que devrais-je faire ?

Je suppose que la réponse est quelque part ici dans ce lien vers la documentation

ou est-ce quelque chose comme utiliser &amp ; pour le caractère "&" ??

308
Hubert

Même si vous utilisez le formatage de chaîne, il vous faut parfois des espaces au début ou à la fin de votre chaîne. Dans ces cas, échapper avec l'attribut \, ni l'attribut xml:space n'aide à rien. Vous devez utiliser l'entité HTML &#160; pour un espace.

Utilisez &#160; pour les espaces insécables.
Utilisez &#032; pour l’espace normal.

456
duessi

J'ai rencontré le même problème. Je voulais laisser un blanc à la fin d'une chaîne de ressources représentant un nom de champ à l'écran.

J'ai trouvé une solution sur ce problème de rapport: https://github.com/iBotPeaches/Apktool/issues/124

C'est la même idée que suggère Duessi. Insérez \u0020 directement dans le XML pour un blanc que vous souhaitez conserver.

Exemple : 

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

Le remplacement est fait au moment de la construction, donc cela n’affectera pas les performances de votre jeu.

432
DavGin

Cette documentation suggère que les citations fonctionnent:

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

Je viens d'utiliser le code UTF pour l'espace "\ u0020" dans le fichier strings.xml.

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

fonctionne très bien. (Android aime les codes UTF)

34
Jasen

Il est possible d'espacer avec différentes largeurs:

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

| ESPACE | ESPACE MINCE | ESPACE CHEVEUX | pas d'espace |

Visualisation:

 enter image description here

9
Andrey

Cette question est peut-être ancienne, mais la manière la plus simple de le faire est d’ajouter des guillemets . Par exemple:

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

Si vous voulez vraiment le faire comme vous le faisiez alors je pense que vous devez lui dire que les espaces sont pertinents en les évitant:

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

Cependant, je voudrais utiliser format de chaîne pour cela. Quelque chose comme ce qui suit:

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

puis

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

utilisez "" avec la valeur de ressource de chaîne.

Exemple : "valeur avec espaces"

OU 

utilisez le code\u0020 pour les espaces.

5
Bhupendra Joshi

Bien travailler J'utilise\u0020 

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

Fichier 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();

Capture d'écranici Image de l'affichage Fonctionnement de ce code

4
Tarsbir Singh

Un argument peut être fait pour l'ajout d'espace par programme. Étant donné que ces cas seront souvent utilisés dans des concaténations, j'ai décidé d'arrêter la folie et de ne faire que l'ancien + " " +. Celles-ci auront un sens dans les la plupart langues européennes, si je comprends bien.

1
MPelletier

Toutes les réponses ici n'ont pas fonctionné pour moi. Au lieu de cela, pour ajouter un espace à la fin d'une chaîne dans XML j'ai fait ceci 

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

Il existe également la solution consistant à utiliser CDATA. Exemple:

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

Mais en général, je pense que \u0020 est suffisant.

0

Je n'ai aucune idée d'Android en particulier, mais cela ressemble au traitement habituel des espaces XML - les espaces de début et de fin au sein d'un élément sont généralement considérés comme non significatifs et supprimés. Essayez 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>
0
Pavel Minaev

Si vous avez besoin d'espace pour le concaténer ultérieurement avec d'autres chaînes, vous pouvez utiliser l'approche de formatage de chaîne consistant à ajouter des arguments à votre définition de chaîne:

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

Puis formatez la chaîne comme suit:

String message = context.getString(R.string.error_, "Something went wrong")
0
TheIT

Cela ne répond peut-être pas à la question (comment conserver les espaces blancs en XML), mais cela peut résoudre le problème sous-jacent de manière plus harmonieuse.

Au lieu de ne compter que sur les ressources XML, concaténez à l'aide de chaînes de formatage . Supprimez tout d'abord les espaces.

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

Et construisez ensuite votre chaîne différemment:

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
Skusku