Cómo mantener los espacios al final y / o en el comienzo de una cadena?
-
22-09-2019 - |
Pregunta
Tengo para concatenar estas dos cadenas de mis archivos de recursos / valor:
<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2"> flips !</string>
lo hago de esta manera:
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();
Sin embargo, los espacios al final de la primera secuencia y al comienzo de la segunda cadena han desaparecido (cuando se muestra la tostada) ...
¿Qué debo hacer?
Creo que la respuesta está en algún lugar aquí en este documentación enlace
o se trata de algo así como el uso de & ;
para el carácter "&" ??
Solución
Incluso si se utiliza el formato de cadenas, a veces todavía necesita espacios en blanco al principio o al final de la cadena. Para estos casos, ni escapar con \
, ni atributo xml:space
ayuda. Debe utilizar HTML entidad  
por un espacio en blanco.
El uso de espacios en blanco  
irrompible.
Uso  
para el espacio regular.
Otros consejos
me encontré con el mismo problema. Yo quería dejar un espacio en blanco al final de una cadena de recursos que representa un nombre de campo en la pantalla.
He encontrado una solución en este informe emisión: https://github.com/iBotPeaches/Apktool / temas / 124
Esta es la misma idea que sugiere Duessi. Insertar \u0020
directamente en el XML para un espacio en blanco que desea conservar.
Ejemplo:
<string name="your_id">Score :\u0020</string>
La sustitución se realiza en tiempo de compilación, por lo que no afectará el rendimiento del juego.
documentación sugiere citar funcionará:
<string name="my_str_spaces">" Before and after? "</string>
sólo tiene que utilizar el código UTF para el espacio "\ u0020" en el archivo strings.xml.
<string name="some_string">\u0020The name of my string.\u0020\u0020</string>
funciona muy bien. (Android ama códigos UTF)
Esta pregunta puede ser viejo, pero a partir de ahora la forma más fácil de hacerlo es agregar comillas. Por ejemplo:
<string name="Toast_Memory_GameWon_part1">"you found ALL PAIRS ! on "</string>
<string name="Toast_Memory_GameWon_part2">" flips !"</string>
Si realmente quiere hacerlo de la manera que estaba haciendo entonces yo creo que hay que decirle que el espacio en blanco es relevante escapándolo:
<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on\ </string>
<string name="Toast_Memory_GameWon_part2">\ flips !</string>
Sin embargo, yo usaría formato de cadenas para esto. Algo parecido a lo siguiente:
<string name="Toast_Memory_GameWon">you found ALL PAIRS ! on %d flips !</string>
entonces
String message_all_pairs_found = String.format(getString(R.string.Toast_Memory_GameWon), total_flips);
uso "" con el valor de recurso de cadena.
Ejemplo: "Valor con espacios"
o
El uso de código \ u0020 para espacios.
Trabajo también Estoy 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>
archivo 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();
Todas las respuestas aquí no funcionó para mí. En su lugar, añadir un espacio al final de una cadena en XML
Hice esto
<string name="more_store">more store<b> </b> </string>
Un argumento se puede hacer para añadir el espacio mediante programación. Dado que estos casos se utilizan a menudo en concatenaciones, decidí parar la locura y acaba de hacer el viejo + " " +
. Estos tendrán sentido en la mayoría de los idiomas europeos, me gustaría reunirse.
No tengo ni idea acerca de Android en particular, pero esto se ve como el XML habitual espacio en blanco manipulación - espacio inicial y final dentro de un elemento generalmente se considera insignificante y se retira. Trate 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>
Esta realidad no puede responder a la pregunta (¿Cómo mantener los espacios en blanco en XML) pero puede resolver el problema de fondo con más gracia.
En lugar de confiar únicamente en los recursos XML, usando concatenar las cadenas de formato. Así que quitar primero los espacios en blanco
<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on</string>
<string name="Toast_Memory_GameWon_part2">flips !</string>
Y luego construir la cadena de manera diferente:
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();
También existe la solución de utilizar CDATA
. Ejemplo:
<string name="test"><![CDATA[Hello world]]></string>
Pero en general creo \u0020
es lo suficientemente bueno.
Si usted necesita el espacio con el fin de concatenar más adelante con otras cadenas, entonces usted puede utilizar la cadena enfoque de añadir argumentos a su definición de formato de cadenas:
<string name="error_">Error: %s</string>
A continuación, dar formato a la cadena como:
String message = context.getString(R.string.error_, "Something went wrong")
no funciona con xml: espacio = "preservar"
así que hice de la manera más rápida =>
Simplemente añade a +" "+ cuando lo necesitaba ...
String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);