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