Comment garder les espaces en fin et/ou au début d'une Chaîne de caractères?

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 phrase et au début de la deuxième chaîne ont disparu (quand le pain est indiqué) ...

Que dois-je faire ?

je suppose que la réponse est quelque part ici dans ce lien de documentation

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

286
demandé sur Rahul Sharma 2009-10-19 09:06:56

15 réponses

même si vous utilisez le formatage de chaîne, parfois vous avez encore besoin d'espaces blancs au début ou à la fin de votre chaîne. Dans ces cas, ni l'attribut \ , ni l'attribut xml:space n'aident à s'échapper. Vous devez utiliser l'entité HTML &#160; pour un espace.

utiliser &#160; pour les espaces non cassables.

Utilisez &#032; pour l'espace régulier.

437
répondu duessi 2017-03-27 02:37:34

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

j'ai trouvé une solution sur ce rapport : https://github.com/iBotPeaches/Apktool/issues/124

c'est la même idée que duessi suggère. Insérez \u0020 directement dans le XML pour un blanc que vous souhaitez préserver.

exemple:

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

le remplacement est fait au moment de la construction, donc il n'affectera pas la performance de votre jeu.

406
répondu DavGin 2015-12-04 13:41:32

Ce documentation suggère citant:

<string name="my_str_spaces">" Before and after? "</string>
111
répondu Skywalker5446 2018-01-08 11:48:01

j'utilise simplement le code UTF pour l'espace" \u0020 " dans les chaînes.fichier xml.

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

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

32
répondu Jasen 2016-10-24 06:24:35

si vous voulez vraiment le faire comme vous le faisiez alors je pense que vous devez lui dire que l'espace est pertinent en l'échappant:

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

cependant, j'utiliserais string formatting pour cela. Quelque chose comme:

<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
répondu Jeremy Logan 2009-10-19 20:22:19

il est possible d'espacer avec une largeur différente:

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

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

Visualisation:

enter image description here

6
répondu Andrey 2016-03-14 15:52:04

utiliser "" la chaîne de la valeur de la ressource.

exemple : "valeur avec espaces "

ou

utilisez le code \u0020 pour les espaces.

5
répondu Bhupendra Joshi 2017-08-08 12:48:16

fonctionne bien 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'écran ici Image montrant le fonctionnement de ce code

4
répondu Tarsbir Singh 2018-05-14 17:05:31

cette question est peut-être ancienne, mais la façon la plus facile 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>
3
répondu kyay 2018-07-21 03:28:05

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 de caractères dans XML j'ai fait ceci

<string name="more_store">more store<b> </b> </string>
1
répondu toobsco42 2013-11-23 04:45:56

un argument peut être avancé pour ajouter l'espace de manière programmatique. Comme ces cas seront souvent utilisés en concaténations, j'ai décidé d'arrêter la folie et de faire le vieux + " " + . Ceux-ci auront du sens dans la plupart langues européennes, je crois.

1
répondu MPelletier 2016-04-11 16:33:41

cela peut ne pas répondre à la question (Comment conserver les espaces en XML), mais il peut résoudre le problème sous-jacent plus gracieusement.

au lieu de compter uniquement sur les ressources XML, concaténez en utilisant des chaînes de format. Donc d'abord supprimer les espaces

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

Et ensuite construire 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
répondu Skusku 2018-05-29 09:58:38

si vous avez besoin de l'espace dans le but de le concaténer plus tard avec d'autres chaînes, alors vous pouvez utiliser l'approche de formatage de chaîne d'ajouter des arguments à votre définition de chaîne:

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

formater ensuite la chaîne comme:

String message = context.getString(R.string.error_, "Something went wrong")
0
répondu TheIT 2018-06-25 02:39:21

Je n'ai aucune idée à propos D'Android en particulier, mais cela ressemble à la gestion habituelle XML whitespace - menant et traînant whitespace dans un élément est généralement considéré insignifiant et enlevé. 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>
-1
répondu Pavel Minaev 2009-10-19 05:18:31

il ne fonctionne pas avec xml: space= "preserve"

j'ai donc fait de la manière la plus rapide =>

j'ai simplement ajouté un +" "+ où j'en avais besoin ...

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);
-7
répondu Hubert 2009-10-19 05:45:30