Jak zachować spacje na końcu i / lub na początku łańcucha?

Muszę połączyć te dwa łańcuchy z moich plików zasobów/wartości:

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2"> flips !</string>

Robię to w ten sposób:

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

Ale spacje na końcu pierwszego ciągu i na początku drugiego ciągu zniknęły (kiedy toast jest pokazany) ...

Co mam zrobić ?

Myślę, że odpowiedź jest gdzieś tutaj w tym link do dokumentacji

Czy jest to coś w rodzaju używania &amp ; dla postaci"&"??

Author: Rahul Sharma, 2009-10-19

15 answers

Nawet jeśli używasz formatowania łańcuchów, czasami nadal potrzebujesz białych spacji na początku lub końcu łańcucha. W takich przypadkach nie pomaga ani Ucieczka z \, ani xml:space atrybut. Musisz użyć encji HTML &#160; dla spacji.

Użyj &#160; dla niełamliwych białych znaków.
Użyj &#032; dla regularnej przestrzeni.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-27 02:37:34

Natknąłem się na ten sam problem. Chciałem zostawić puste na końcu łańcucha zasobów reprezentującego nazwę pola na ekranie.

Znalazłem rozwiązanie tego raportu: https://github.com/iBotPeaches/Apktool/issues/124

To jest ten sam pomysł, który sugeruje Duessi. Wstaw \u0020 bezpośrednio w XML dla pustego pola, które chcesz zachować.

Przykład:

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

Wymiana odbywa się w czasie budowy, dlatego nie wpłynie to na wydajność Twoja gra.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-04 13:41:32

Ta Dokumentacja sugeruje, że cytowanie zadziała:

<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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-08 11:48:01

Używam tylko kodu UTF dla spacji "\u0020"w łańcuchach.plik xml.

<string name="some_string">\u0020The name of my string.\u0020\u0020</string>
Działa świetnie. (Android uwielbia kody 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-24 06:24:35

Jeśli naprawdę chcesz zrobić to tak, jak robiłeś, to myślę, że musisz powiedzieć, że biała spacja jest istotna, uciekając od niej:

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on\ </string>
<string name="Toast_Memory_GameWon_part2">\ flips !</string>

Jednak użyłbym do tego formatowania łańcuchów. Coś w stylu:

<string name="Toast_Memory_GameWon">you found ALL PAIRS ! on %d flips !</string>

Then

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/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-19 20:22:19

Istnieje możliwość spacji o różnej szerokości:

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

| SPACE / THIN SPACE / HAIR SPACE / no space /

Wizualizacja:

Tutaj wpisz opis obrazka

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-14 15:52:04

Użyj "" z łańcuchem wartości zasobu.

Przykład : "wartość ze spacjami"

LUB

Użyj kodu \u0020 dla spacji.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-08 12:48:16

Działa dobrze Używam \u0020

<string name="hi"> Hi \u0020 </string>
<string name="ten"> \u0020 out of 10  </string>
<string name="youHaveScored">\u0020 you have Scored \u0020</string>

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

zrzut ekranu tutaj obraz pokazujący działanie tego kodu

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-14 17:05:31

To pytanie może być stare, ale na razie najprostszym sposobem na to jest dodanie cudzysłowów. Na przykład:

<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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-21 03:28:05

Wszystkie odpowiedzi tutaj nie działają dla mnie. Zamiast tego, aby dodać spację na końcu łańcucha w XML zrobiłem to

<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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-23 04:45:56

Można podać argument dodawania przestrzeni programowo. Ponieważ te przypadki będą często wykorzystywane w konkatenacjach, postanowiłem zatrzymać szaleństwo i po prostu zrobić stare + " " +. Będą one miały sens w większości języków europejskich, jak sądzę.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-11 16:33:41

Może to nie odpowiedzieć na pytanie (jak zachować białe spacje w XML), ale może rozwiązać podstawowy problem bardziej wdzięcznie.

Zamiast polegać tylko na zasobach XML, Połącz za pomocą ciągów formatujących. Więc najpierw usuń spacje

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on</string>
<string name="Toast_Memory_GameWon_part2">flips !</string>

A następnie zbuduj swój ciąg inaczej:

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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-29 09:58:38

Jeśli potrzebujesz spacji w celu późniejszego połączenia jej z innymi łańcuchami, możesz użyć metody formatowania łańcuchów, polegającej na dodaniu argumentów do definicji łańcuchów:

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

Następnie sformatuj łańcuch jako:

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/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-25 02:39:21

Nie mam pojęcia o Androidzie w szczególności, ale wygląda to na zwykłą obsługę XML whitespace - początkowe i końcowe białe spacje w elemencie są ogólnie uważane za nieistotne i usuwane. Try 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/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-19 05:18:31

Nie działa z xml: space= "preserve"

Więc zrobiłem to najszybciej = >

Po prostu dodałem + "" + tam, gdzie tego potrzebowałem ...

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/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-19 05:45:30