¿Cómo mantener los espacios al final y / o al principio de una cadena?


Tengo que concatenar estas dos cadenas de mis archivos de recursos/valores:

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

Pero los espacios al final de la primera cadena y al principio de la segunda cadena han desaparecido (cuando se muestra el Brindis)...

¿Qué debo hacer ?

Supongo que la respuesta está en algún lugar aquí en este enlace de documentación

O es algo así como usar &amp ; ¿para el personaje"&"??

Author: Rahul Sharma, 2009-10-19

15 answers

Incluso si utiliza el formato de cadena, a veces todavía necesita espacios en blanco al principio o al final de la cadena. Para estos casos, ni el escape con \, ni el atributo xml:space ayuda. Debe usar HTML entity &#160; para un espacio en blanco.

Use &#160; para espacios en blanco no rompibles.
Utilice &#032; para el espacio regular.

 437
Author: duessi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-27 02:37:34

Me encontré con el mismo problema. Quería dejar un espacio en blanco al final de una cadena de recursos que representa un nombre de campo en pantalla.

Encontré una solución en este informe de problema: https://github.com/iBotPeaches/Apktool/issues/124

Esta es la misma idea que sugiere Duessi. Inserte \u0020 directamente en el XML para un espacio en blanco que desee conservar.

Ejemplo:

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

El reemplazo se realiza en el tiempo de compilación, por lo tanto, no afectará el rendimiento de tu juego.

 406
Author: DavGin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-04 13:41:32

Esta documentación sugiere que las citas funcionarán:

<string name="my_str_spaces">" Before and after? "</string>
 111
Author: Skywalker5446,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-08 11:48:01

Solo uso el código UTF para el espacio "\u0020" en las cadenas.archivo xml.

<string name="some_string">\u0020The name of my string.\u0020\u0020</string>

Funciona muy bien. (Android ama los códigos UTF)

 32
Author: Jasen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-24 06:24:35

Si realmente quieres hacerlo de la manera que lo estabas haciendo, entonces creo que tienes 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, usaría formato de cadena para esto. Algo como 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);
 8
Author: Jeremy Logan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-19 20:22:19

Es posible espaciar con diferente ancho:

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

/ ESPACIO / ESPACIO DELGADO / ESPACIO PARA EL CABELLO / sin espacio /

Visualización:

introduzca la descripción de la imagen aquí

 6
Author: Andrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-14 15:52:04

Use "" con el valor del recurso de cadena.

Ejemplo : "valor con espacios"

O

Utilice el código \u0020 para los espacios.

 5
Author: Bhupendra Joshi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-08 12:48:16

Funciona bien 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();

Captura de pantalla aquí se muestra la Imagen de Trabajo de este código

 4
Author: Tarsbir Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-14 17:05:31

Esta pregunta puede ser antigua, 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>
 3
Author: kyay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-21 03:28:05

Todas las respuestas aquí no funcionaron para mí. En su lugar, para agregar un espacio al final de una cadena en XML hice esto

<string name="more_store">more store<b> </b> </string>
 1
Author: toobsco42,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-23 04:45:56

Se puede hacer un argumento para agregar el espacio mediante programación. Dado que estos casos se utilizarán a menudo en concatenaciones, decidí detener la locura y simplemente hacer el viejo + " " +. Estos tendrán sentido en la mayoría de lenguas europeas, yo diría.

 1
Author: MPelletier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-11 16:33:41

Esto puede no responder realmente la pregunta (Cómo mantener los espacios en blanco en XML), pero puede resolver el problema subyacente con más gracia.

En lugar de depender solo de los recursos XML, concatenar usando cadenas de formato. Así que primero elimine 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 construye tu cadena de forma 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();
 0
Author: Skusku,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-29 09:58:38

Si necesita el espacio con el propósito de concatenarlo posteriormente con otras cadenas, entonces puede usar el enfoque de formato de cadena de agregar argumentos a su definición de cadena:

<string name="error_">Error: %s</string>

Luego formatea la cadena como:

String message = context.getString(R.string.error_, "Something went wrong")
 0
Author: TheIT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-25 02:39:21

No tengo idea acerca de Android en particular, pero esto parece que el manejo de espacios en blanco XML habitual - los espacios en blanco iniciales y finales dentro de un elemento generalmente se consideran insignificantes y se eliminan. Intenta 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>
 -1
Author: Pavel Minaev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-19 05:18:31

No funciona con xml: space = "preserve"

Así que lo hice de la manera más rápida = >

Simplemente agregué un +" "+ donde lo necesitaba ...

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);
 -7
Author: Hubert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-19 05:45:30