2009-10-19 8 views
264

je dois concaténer ces deux chaînes de mes ressources/fichiers de valeur:Comment conserver les espaces à la fin et/ou au début d'une chaîne?

<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 montré) ...

Que dois-je faire?

Je pense que la réponse est quelque part dans cette documentation link

ou est-ce quelque chose comme l'utilisation &amp ; pour le caractère « & » ??

+2

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 caractère espace réel (U + 0020) en tant que premier ou dernier caractère de la ressource de chaîne. – Thomas

+1

Nasty méchant android :( –

Répondre

390

Même si vous utilisez la mise en forme de chaîne, parfois vous avez besoin encore des espaces blancs au début ou à la fin de votre chaîne. Dans ces cas, aucun des deux attributs \ et xml:space ne peut s'échapper. Vous devez utiliser l'entité HTML &#160; pour un espace.

Utilisez &#160; pour les espaces non fracturables. Utilisez le &#032; pour l'espace normal.

+11

Ce type de * fonctionne, mais insère un espace insécable (U + 00A0) à la place d'un espace normal, ce qui peut être indésirable dans certaines situations – Thomas

+0

ce, c'est un désordre total! – Snicolas

+29

& # 160 ne fonctionne pas ... éditeur xml donne une erreur et vous ne pouvez pas construire le projet ... \ u0020 fonctionne très bien! – Camacho

0

Je n'ai aucune idée d'Android en particulier, mais cela ressemble à la gestion habituelle des espaces XML - les espaces de début et de fin dans un élément sont généralement considérés comme insignifiants 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

Malheureusement, 'xml: space' semble être ignoré – Thomas

-6

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

donc je l'ai fait la plus rapide =>

J'ai simplement ajouté un + » « + où je besoin il ...

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

Quel est le point d'utiliser les ressources du tout si vous voulez simplement mélanger des littéraux de chaînes Java? –

8

Si vous voulez vraiment faire la façon dont vous faisiez alors je pense que vous devez lui dire que les espaces blancs est pertinent en échapper:

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

Echapper avec une barre oblique inverse ne fonctionne pas (Pour moi, au moins.) L'utilisation d'une chaîne de formatage est généralement une excellente solution, mais pas toujours, par exemple, String.format provoque de nombreuses allocations de mémoire qui sont indésirables dans un jeu. – Thomas

+0

échapper les espaces (en utilisant le "\") ne fonctionne pas pour moi non plus –

+0

Le formatage ne fonctionne que si votre texte est affiché dans le même style Dans mon cas, les 2 choses à joindre sont en gras par rapport à des couleurs normales et différentes –

365

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 rapport d'émission: https://github.com/iBotPeaches/Apktool/issues/124

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

Exemple:

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

Le remplacement est effectué au moment de la construction, donc il ne sera pas affecter les performances de votre jeu.

+2

Nice, fonctionne comme un charme! Merci! – Thomas

+3

FYI,   fonctionne également – HXCaine

+0

fonctionne très bien. demande quelle est la différence entre l'utilisation et   –

95

Ce documentation suggère cité fonctionnera:

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

Garantit-il '' "Avant et après?" ' – Prateek

+4

Comme ceci plus que l'utilisation de caractères Unicode! Merci! –

+1

Malheureusement, certains outils de localisation, comme Passolo, ajoutent automatiquement une barre oblique avant la citation. Et string devient ceci: \ "Avant et après? \". Par conséquent, cette citation apparaît dans le texte. L'utilisation de \ u0020 semble donc être meilleure dans ce cas. – Fox

1

Toutes les réponses ici ne fonctionnent pas pour moi. Au lieu de cela, d'ajouter un espace à la fin d'une chaîne dans XML Je l'ai fait

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

Ça marche! Merci. – 1111161171159459134

4

Il est possible de l'espace avec une largeur différente:

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

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

Visualisation:

enter image description here

1

Un argument peut être fait pour ajouter l'espace d'un programme. Puisque ces cas seront souvent utilisés dans les concaténations, j'ai décidé d'arrêter la folie et de faire juste le vieux + " " +. Ceux-ci auront du sens dans plus langues européennes, je voudrais rassembler.

31

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)

+2

Cela a fonctionné pour moi où la réponse acceptée n'a pas. – Lance

+0

Y a-t-il quelque chose de nouveau dans la [réponse existante] (https://stackoverflow.com/a/3862065/905686)? – user905686

5

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

Exemple: "valeur" avec des espaces

OU

utilisation \ u0020 code pour espaces.

Questions connexes