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

StackOverflow https://stackoverflow.com/questions/1587056

  •  22-09-2019
  •  | 
  •  

Вопрос

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

<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 ; для символа "&"??

Это было полезно?

Решение

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

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

Другие советы

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

Я нашел решение по этой проблеме . : https://github.com/iBotPeaches/Apktool/issues/124

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

Пример :

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

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

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

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

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

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

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

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

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

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

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

| ПРОСТРАНСТВО | ТОНКОЕ ПРОСТРАНСТВО | ПРОСТРАНСТВО ДЛЯ ВОЛОС | нет пространства |

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

enter image description here

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

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

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

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

или

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

Работает хорошо Я использую \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();

Скриншот вот изображение, показывающее Работу этого кода

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

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

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

Я понятия не имею об 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>

Возможно, на самом деле это не дает ответа на вопрос (как сохранить пробелы в 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();

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

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

Но в целом я думаю \u0020 этого достаточно.

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

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

Затем отформатируйте строку следующим образом:

String message = context.getString(R.string.error_, "Something went wrong")

Это не работает с xml:space="сохранить"

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

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

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top