398 votes

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

Je dois concaténer ces deux chaînes de caractères à 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 dois-je faire ?

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

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

2 votes

Il y a quelques bonnes réponses, mais aucune ne fonctionne pour moi (voir mes commentaires). La prime est pour toute réponse qui fournit un moyen d'obtenir un vrai caractère espace (U+0020) comme premier ou dernier caractère de la ressource chaîne.

3 votes

Méchant méchant Android :(

562voto

duessi Points 1451

Même si vous utilisez le formatage des chaînes de caractères, vous avez parfois besoin d'espaces blancs au début ou à la fin de votre chaîne. Dans ces cas, ni l'échappement avec \ ni xml:space L'attribut aide. Vous devez utiliser l'entité HTML &#160; pour un espace blanc.

Utilisez &#160; pour les espaces blancs non cassables.
Utilisez &#032; pour un espace régulier.

12 votes

Este type de fonctionne, mais il insère une espace insécable (U+00A0) au lieu d'une espace normale. Cela peut être indésirable dans certaines situations.

0 votes

Pour les tests, par exemple, c'est un désordre total !

58 votes

  ne fonctionne pas... l'éditeur xml donne une erreur et vous ne pouvez pas construire le projet... \u0020 fonctionne bien !

534voto

DavLink Points 2260

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 dans ce rapport : https://github.com/iBotPeaches/Apktool/issues/124

C'est la même idée que celle suggérée par Duessi. Insérer \u0020 directement dans le XML pour un blanc que vous souhaitez préserver.

Exemple :

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

Le remplacement se fait au moment de la construction, il n'affectera donc pas les performances de votre jeu.

0 votes

Cela fonctionne très bien. Je me demande quelle est la différence entre l'utilisation de ce produit et celle d'un autre produit.

3 votes

@androiddeveloper, \u indique un caractère unicode comme séquence d'échappement (pas un caractère unicode directement dans le fichier). indique une entité html, ce qui signifie que vous comptez sur le fait que votre chaîne xml soit analysée en html (elle l'est par défaut lorsqu'elle est utilisée dans des vues de texte). Voir w3schools.com/html/html_entities.asp

0 votes

@greg7gkb Intéressant, mais je ne savais pas que c'était par défaut. Vous voulez dire que si j'utilise "setText" sur la ressource chaîne, cela fonctionnera de la même manière ?

152voto

Skywalker5446 Points 436

Este documentation suggère que la citation fonctionnera :

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

2 votes

Est-ce qu'il garantit <string name="my_str_spaces">" Before <b>and</b> after? "</string>

5 votes

Je préfère cela à l'utilisation de caractères unicodes ! Merci !

2 votes

Malheureusement, certains outils de localisation, comme Passolo, ajoutent automatiquement le slash avant la citation. Et la chaîne devient ceci : <string name="my_str_spaces">\" Avant et après ? \"</string>. Par conséquent, ces guillemets apparaissent dans le texte. Donc, en utilisant \u0020 semble être meilleur dans ce cas.

9voto

fiXedd Points 21644

Si vous voulez vraiment faire comme vous le faisiez, je pense que vous devez lui dire que l'espace blanc 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 formatage des chaînes pour cela. Quelque chose comme ceci :

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

1 votes

L'échappement avec une barre oblique inversée ne fonctionne pas (du moins pour moi). L'utilisation d'une chaîne de format est une excellente solution en général, mais pas toujours. Par exemple, String.format provoque de nombreuses allocations de mémoire qui ne sont pas souhaitables dans un jeu.

0 votes

L'échappement des espaces (en utilisant le "\ " ) n'a pas fonctionné pour moi non plus.

1 votes

Le formatage ne fonctionne que si votre texte est affiché dans le même style. Dans mon cas, les deux éléments réunis sont le gras et le normal, ainsi que des couleurs différentes.

2voto

toobsco42 Points 613

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 en XML J'ai fait ça

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X