Как сохранить пробелы в конце и/или в начале строки?

Мне нужно объединить эти две строки из моих файлов ресурсов/значений:

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

Я делаю это так:

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

Но пробелы в конце первой строки и в начале второй строки исчезли (когда отображается Тост)...

Что мне делать?

Я думаю, что ответ здесь где-то в этой документации

или это что-то вроде использования &amp; для символа & &?

Ответ 1

Даже если вы используете форматирование строк, иногда вам все еще нужны белые пробелы в начале или в конце строки. Для этих случаев не срабатывает атрибут \, а не xml:space. Вы должны использовать HTML-объект &#160; для пробелов.

Используйте &#160; для непробиваемых пробелов.
Используйте &#032; для обычного пространства.

Ответ 2

Я столкнулся с той же проблемой. Я хотел оставить пустой в конце строки ресурсов, представляющей имя поля на экране.

Я нашел решение в этом выпуске: https://github.com/iBotPeaches/Apktool/issues/124

Это та же идея, что и Дуесси. Вставьте \u0020 непосредственно в XML для пробела, который вы хотели бы сохранить.

Пример:

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

Замена производится во время сборки, поэтому она не повлияет на производительность вашей игры.

Ответ 3

Эта документация предполагает, что цитирование будет работать:

<string name="my_str_spaces">" Before and after? "</string>

Ответ 4

Я просто использую код UTF для пробела "\ u0020" в файле strings.xml.

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

отлично работает. (Android любит коды UTF)

Ответ 5

Этот вопрос может быть старым, но на данный момент самый простой способ сделать это - добавить кавычки. Например:

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

Ответ 6

Возможен интервал разной ширины:

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

| ПРОСТРАНСТВО | ТОНКОЕ ПРОСТРАНСТВО | ПРОСТРАНСТВО ВОЛОС | нет места |

Визуализация:

enter image description here

Ответ 7

Если вы действительно хотите сделать это так, как вы делали, я думаю, вы должны сказать, что пробел имеет значение, избегая его:

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

Однако для этого я использовал форматирование строк. Что-то вроде следующего:

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

затем

String message_all_pairs_found = String.format(getString(R.string.Toast_Memory_GameWon), total_flips);

Ответ 8

используйте "" со значением ресурса строки.

Пример:   "значение с пробелами"

ИЛИ

используйте\u0020 код для пробелов.

Ответ 9

Хорошо работаю Я использую \u0020

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

Файл 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();

Снимок экрана здесь Изображение показания Работа с этим кодом

Ответ 10

Все ответы здесь не помогли мне. Вместо этого, чтобы добавить пробел в конце строки в XML, я сделал это

<string name="more_store">more store<b> </b> </string>

Ответ 11

Аргумент может быть добавлен для программного обеспечения. Поскольку эти случаи будут часто использоваться в конкатенациях, я решил остановить безумие и просто сделать старый + " " +. Это будет иметь смысл на большинстве европейских языков, я бы собрался.

Ответ 12

Я понятия не имею об Android в частности, но это похоже на обычную обработку пробелов XML - ведущее и конечное пробелы внутри элемента обычно считаются несущественными и удалены. Попробуйте 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>

Ответ 13

На самом деле это не может ответить на вопрос (как сохранить пробелы в XML), но может более эффективно решить основную проблему.

Вместо того, чтобы полагаться только на ресурсы XML, объедините их с помощью форматированных строк. Поэтому сначала удалите пробелы

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

И затем постройте свою строку по-разному:

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

Ответ 14

Существует также решение использования CDATA. Пример:

<string name="test"><![CDATA[Hello          world]]></string>

Но в целом я думаю, что \u0020 достаточно хорош.

Ответ 15

Если вам нужно пространство для последующей его конкатенации с другими строками, вы можете использовать подход форматирования строк, добавляя аргументы в определение строки:

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

Затем для форматирования строки (например, если у вас есть ошибка, возвращенная сервером, в противном случае используйте getString(R.string.string_resource_example)):

String message = context.getString(R.string.error_, "Server error message here")

Что приводит к:

Error: Server error message here

Ответ 16

Он не работает с xml: space = "preserve"

поэтому я сделал это самым быстрым способом = >

Я просто добавил + "" +, где мне это нужно...

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);