如何在String的结尾和/或开头保留空格?

时间:2009-10-19 05:06:57

标签: android string-concatenation

我必须从资源/值文件中连接这两个字符串:

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

但是第一个字符串末尾和第二个字符串开头的空格 已经消失了(当显示Toast时)......

我该怎么办?

我想答案就在这个documentation link

的某处

或类似于使用 &amp ; 作为“&amp;”性格??

16 个答案:

答案 0 :(得分:463)

即使您使用字符串格式,有时您仍然需要在字符串的开头或结尾处使用空格。对于这些情况,使用\xml:space属性进行转义都无济于事。您必须将HTML实体&#160;用于空格。

&#160;用于不易碎的空格 使用&#032;作为常规空间。

答案 1 :(得分:445)

我遇到了同样的问题。我想在表示屏幕字段名称的资源字符串末尾留空。

我在此问题报告中找到了解决方案:https://github.com/iBotPeaches/Apktool/issues/124

这与Duessi建议的想法相同。直接在XML中插入\u0020以获取您想要保留的空白。

示例:

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

替换是在构建时完成的,因此不会影响游戏的性能。

答案 2 :(得分:125)

documentation建议引用可行:

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

答案 3 :(得分:34)

我只是将UTF代码用于空间&#34; \ u0020&#34;在strings.xml文件中。

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

效果很好。 (Android喜欢UTF代码)

答案 4 :(得分:11)

这个问题可能很老了,但是到目前为止,最简单的方法是添加引号。 例如:

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

答案 5 :(得分:10)

可能有不同宽度的空间:

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

|空间|薄的空间|头发空间|没有空间|

可视化:

enter image description here

答案 6 :(得分:8)

如果你真的想按照自己的方式去做,那么我认为你必须通过逃避它来告诉它空白是相关的:

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

但是,我会使用string formatting。如下所示:

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

答案 7 :(得分:5)

使用&#34;&#34;使用字符串资源值。

示例:    &#34;值为空格&#34;

OR

使用\ u0020空格代码。

答案 8 :(得分:4)

运作良好 我正在使用\ 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();

截图 here Image of Showing Working of this code

答案 9 :(得分:1)

这里的所有答案对我都不起作用。相反,要在XML中的字符串末尾添加空格,我就这样做了

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

答案 10 :(得分:1)

可以通过编程方式添加空格。由于这些案例经常用于连接,我决定停止疯狂,只做旧+ " " +。这些将在大多数欧洲语言中有意义,我会聚集。

答案 11 :(得分:0)

我特别不了解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>

答案 12 :(得分:0)

这可能实际上没有回答问题(如何在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();

答案 13 :(得分:0)

如果您需要空间以便以后将其与其他字符串连接在一起,则可以使用在字符串定义中添加参数的字符串格式化方法:

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

然后将字符串格式设置为:

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

答案 14 :(得分:0)

还有使用CDATA的解决方案。示例:

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

但是总的来说,我认为\u0020足够好。

答案 15 :(得分:-6)

它不适用于xml:space =“preserve”

所以我用最快的方式做了=&gt;

我只需添加一个+“”+我需要的地方......

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