Como manter os espaços no final e/ou no início de uma String?
-
22-09-2019 - |
Pergunta
Eu tenho que concatenar essas duas strings dos meus arquivos de recurso/valor:
<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2"> flips !</string>
Eu faço assim:
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();
Mas os espaços no final da primeira corda e no início da segunda sequência desapareceram (quando a torrada é mostrada) ...
O que devo fazer ?
Eu acho que a resposta está em algum lugar aqui neste link de documentação
ou é algo como usar & ;
para o caractere "&" ??
Solução
Mesmo se você usar a formatação da string, às vezes ainda precisa de espaços brancos no início ou no final da sua corda. Para esses casos, nem escapando com \
, nem xml:space
atributo ajuda. Você deve usar entidade html  
Para um espaço em branco.
Usar  
para espaço em branco não invasor.
Usar  
para espaço regular.
Outras dicas
Eu tive o mesmo problema. Eu queria deixar um espaço em branco no final de uma sequência de recursos representando um nome de campo na tela.
Encontrei uma solução neste relatório de edição: https://github.com/ibotpeaches/apktool/issues/124
Esta é a mesma ideia que Duessi sugere. Inserir \u0020
Diretamente no XML para um espaço em branco que você gostaria de preservar.
Exemplo :
<string name="your_id">Score :\u0020</string>
A substituição é feita no momento da construção, portanto, não afetará o desempenho do seu jogo.
este documentação sugere que citar vai funcionar:
<string name="my_str_spaces">" Before and after? "</string>
Acabei de usar o código UTF para o espaço " u0020" no arquivo strings.xml.
<string name="some_string">\u0020The name of my string.\u0020\u0020</string>
funciona bem. (Android adora códigos UTF)
Essa questão pode ser antiga, mas a partir de agora a maneira mais fácil de fazer isso é adicionar aspas. Por exemplo:
<string name="Toast_Memory_GameWon_part1">"you found ALL PAIRS ! on "</string>
<string name="Toast_Memory_GameWon_part2">" flips !"</string>
Se você realmente quer fazer isso da maneira que estava fazendo, acho que precisa dizer que o espaço em branco é relevante ao escapar:
<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on\ </string>
<string name="Toast_Memory_GameWon_part2">\ flips !</string>
No entanto, eu usaria formatação de string por esta. Algo como o seguinte:
<string name="Toast_Memory_GameWon">you found ALL PAIRS ! on %d flips !</string>
então
String message_all_pairs_found = String.format(getString(R.string.Toast_Memory_GameWon), total_flips);
Use "" com o valor do recurso String.
Exemplo: "Valor com espaços"
OU
Use o código u0020 para espaços.
Trabalhando bem, estou 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>
Arquivo 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 tela Aqui a imagem de mostrar o trabalho deste código
Todas as respostas aqui não funcionaram para mim. Em vez disso, para adicionar um espaço no final de uma corda em XML
eu fiz isso
<string name="more_store">more store<b> </b> </string>
Um argumento pode ser feito para adicionar o espaço programaticamente.Como esses casos serão frequentemente usados em concatenações, decidi parar com a loucura e apenas fazer o antigo + " " +
.Isso fará sentido em maioria Línguas europeias, eu diria.
Não tenho idéia do Android em particular, mas isso parece o manuseio usual do XML Whitespace - liderando e arrastando espaço em branco dentro de um elemento geralmente é considerado insignificante e removido. Tentar 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>
Isso pode realmente não responder à pergunta (como manter os espaços em branco no XML), mas pode resolver o problema subjacente de maneira mais graciosa.
Em vez de confiar apenas nos recursos XML, concatenar usando seqüências de formato. Então, primeiro remova os espaços em branco
<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on</string>
<string name="Toast_Memory_GameWon_part2">flips !</string>
E então construa sua string de maneira 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();
Há também a solução de usar CDATA
. Exemplo:
<string name="test"><![CDATA[Hello world]]></string>
Mas em geral eu acho \u0020
é bom o suficiente.
Se você precisar do espaço para fins de concatená -lo posterior com outras strings, poderá usar a abordagem de formatação da string de adicionar argumentos à sua definição de string:
<string name="error_">Error: %s</string>
Em seguida, formate a string como:
String message = context.getString(R.string.error_, "Something went wrong")
Não funciona com xml: space = "preserve"
Então eu fiz da maneira mais rápida =>
Eu simplesmente adicionei um + "" + onde eu precisava ...
String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);