Come mantenere gli spazi alla fine e / o all'inizio di una stringa?
-
22-09-2019 - |
Domanda
Ho per concatenare questi due stringhe dai miei file di risorse / valore:
<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2"> flips !</string>
Lo faccio in questo modo:
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();
Ma gli spazi alla fine della prima stringa e all'inizio della seconda stringa sono scomparsi (quando viene mostrato il Toast) ...
Che cosa devo fare?
Credo che la risposta è da qualche parte qui in questo link
o è qualcosa di simile utilizzando & ;
per il carattere "&" ??
Soluzione
Anche se si utilizza la formattazione di stringhe, a volte è ancora necessario spazi bianchi all'inizio o alla fine della stringa. Per questi casi, né la fuga con \
, nè attributo xml:space
aiuta. È necessario utilizzare HTML entità  
per uno spazio bianco.
Usa  
per spazi infrangibile.
Utilizzare  
per lo spazio normale.
Altri suggerimenti
Ho incontrato lo stesso problema. Ho voluto lasciare un vuoto alla fine di una stringa di risorsa che rappresenta un nome di campo sullo schermo.
Ho trovato una soluzione a questo problema rapporto: https://github.com/iBotPeaches/Apktool / temi / 124
Questa è la stessa idea che Duessi suggerisce. Inserire \u0020
direttamente in XML per un vuoto che si desidera conservare.
Esempio:
<string name="your_id">Score :\u0020</string>
La sostituzione avviene al momento della compilazione, quindi non influisce sulle prestazioni del vostro gioco.
mi basta usare il codice UTF per lo spazio "\ u0020" nel file strings.xml.
<string name="some_string">\u0020The name of my string.\u0020\u0020</string>
grandi opere. (Android ama codici UTF)
Questa domanda potrebbe essere vecchia, ma fin d'ora il modo più semplice per farlo è quello di aggiungere le virgolette. Ad esempio:
<string name="Toast_Memory_GameWon_part1">"you found ALL PAIRS ! on "</string>
<string name="Toast_Memory_GameWon_part2">" flips !"</string>
Se si vuole veramente farlo nel modo che stavi facendo, allora penso che si deve dire è che lo spazio bianco è rilevante per scampo:
<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on\ </string>
<string name="Toast_Memory_GameWon_part2">\ flips !</string>
Tuttavia, mi piacerebbe utilizzare formattazione delle stringhe per questo. Qualcosa di simile a quanto segue:
<string name="Toast_Memory_GameWon">you found ALL PAIRS ! on %d flips !</string>
poi
String message_all_pairs_found = String.format(getString(R.string.Toast_Memory_GameWon), total_flips);
l'uso "" con il valore della risorsa di stringa.
Esempio: "Valore con spazi"
o
uso \ code u0020 per gli spazi.
Lavorare bene Sto usando \ u0020
<string name="hi"> Hi \u0020 </string>
<string name="ten"> \u0020 out of 10 </string>
<string name="youHaveScored">\u0020 you have Scored \u0020</string>
file 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();
Cattura schermo qui Immagine di mostrare lavoro di questo codice
Tutte le risposte qui non ha funzionato per me. Invece, per aggiungere uno spazio alla fine di una stringa in XML
ho fatto questo
<string name="more_store">more store<b> </b> </string>
Un argomento può essere fatto per l'aggiunta dello spazio di programmazione. Dal momento che questi casi saranno spesso utilizzati in concatenazioni, ho deciso di fermare la follia e solo fare il vecchio + " " +
. Questi avranno senso in la maggior parte lingue europee, vorrei raccogliere.
Non ho idea su Android in particolare, ma questo sembra il solito trattamento spazi XML - spazi iniziali e finali all'interno di un elemento è generalmente considerato insignificante e rimosso. Prova 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>
Questo non può realmente rispondere alla domanda (Come mantenere gli spazi bianchi in XML), ma si può risolvere il problema di fondo più garbo.
Invece di basarsi solo sulle risorse XML, concatenare utilizzando stringhe di formato. Quindi, prima rimuovere le spazi bianchi
<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on</string>
<string name="Toast_Memory_GameWon_part2">flips !</string>
E poi costruire la stringa in modo diverso:
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();
C'è anche la soluzione di utilizzare CDATA
. Esempio:
<string name="test"><![CDATA[Hello world]]></string>
Ma in generale penso che \u0020
è abbastanza buono.
Se avete bisogno di spazio per la vista della successiva concatenazione con altre stringhe, quindi è possibile utilizzare la stringa di formattazione approccio di aggiungere argomenti alla definizione stringa:
<string name="error_">Error: %s</string>
Quindi formattare la stringa come:
String message = context.getString(R.string.error_, "Something went wrong")
Non funziona con xml: space = "preserve"
così ho fatto il modo più rapido =>
ho semplicemente aggiunto un +" "+ in cui avevo bisogno ...
String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);