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 & ;
pour le caractère"&"??
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  
pour un espace.
utiliser  
pour les espaces non cassables.
Utilisez  
pour l'espace régulier.
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.
Ce documentation suggère citant:
<string name="my_str_spaces">" Before and after? "</string>
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)
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);
il est possible d'espacer avec une largeur différente:
<string name="space_demo">| | | ||</string>
| ESPACE | ESPACE | CHEVEUX | ESPACE pas d'espace |
Visualisation:
utiliser "" la chaîne de la valeur de la ressource.
exemple : "valeur avec espaces "
ou
utilisez le code \u0020 pour les espaces.
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
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>
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>
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.
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();
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")
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>
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);