Как сохранить пробелы в конце и/или в начале строки?
Мне нужно объединить эти две строки из моих файлов ресурсов/значений:
<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();
Но пробелы в конце первой строки и в начале второй строки исчезли (когда отображается Тост)...
Что мне делать?
Я думаю, что ответ здесь где-то в этой документации
или это что-то вроде использования &
для символа & &?
Ответы
Ответ 1
Даже если вы используете форматирование строк, иногда вам все еще нужны белые пробелы в начале или в конце строки. Для этих случаев не срабатывает атрибут \
, а не xml:space
. Вы должны использовать HTML-объект  
для пробелов.
Используйте  
для непробиваемых пробелов.
Используйте  
для обычного пространства.
Ответ 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">| | | ||</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);