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

Hub*_*ert 334 android string-concatenation

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

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2"> flips !</string>
Run Code Online (Sandbox Code Playgroud)

我是这样做的:

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();
Run Code Online (Sandbox Code Playgroud)

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

我该怎么办 ?

我想答案就在这个文档链接的某处

或者它是否像使用&amp ;"&"字符?

due*_*ssi 482

即使您使用字符串格式,有时您仍然需要在字符串的开头或结尾处使用空格.对于这些情况,既没有逃避\,也没有xml:space属性帮助.您必须将HTML实体&#160;用于空格.

使用&#160;非易碎的空白.
使用&#032;正规的空间.

  • &#160不起作用... xml编辑器出错,你无法构建项目...\u0020工作正常! (47认同)
  • \ u0020一般是更好的解决方案.&#032; 要求你解析html,在某些情况下可以随机忽略,导致没有空格 (31认同)
  • 这*种*有效,但它插入一个不间断的空间(U + 00A0)而不是常规空间.在某些情况下这可能是不合需要的. (11认同)
  • 您需要在末尾添加半冒号(;). (10认同)
  • 在部署到 API 25 模拟器的 Android Studio 3.2 上,我使用了 ` `,并且没有出现构建错误,但我的空间仍然被忽略。` ` 有效,但我不想要一个不可破坏的空格。我想要一个普通的空间。`\u0020` 工作。 (6认同)

Dav*_*Gin 470

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

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

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

示例:

<string name="your_id">Score :\u0020</string>
Run Code Online (Sandbox Code Playgroud)

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

  • `\ u0020`是ASCII码的空格.这是我项目的最佳选择,因为我必须确保它是ASCII. (4认同)
  • @androiddeveloper,\ u表示一个unicode字符作为转义序列(不是文件中的unicode char).&#NNN; 表示一个html实体,这意味着你依赖于你的xml字符串被html解析(默认情况下在文本视图中使用时).见http://www.w3schools.com/html/html_entities.asp (2认同)

小智 131

文档建议引用将起作用:

<string name="my_str_spaces">" Before and after? "</string>
Run Code Online (Sandbox Code Playgroud)

  • 比这更像是使用unicode角色!谢谢! (5认同)
  • 它是否保证`<string name ="my_str_spaces">"之前<b>和</ b>之后?"</ string>` (2认同)
  • 不幸的是,一些本地化工具,如Passolo,会在引用之前自动添加斜杠.字符串变成这样:<string name ="my_str_spaces"> \"之前和之后?\"</ string>.因此,此引号出现在文本中.所以在这种情况下使用\ u0020似乎更好. (2认同)

小智 35

我只是在strings.xml文件中使用UTF代码"\ u0020".

<string name="some_string">\u0020The name of my string.\u0020\u0020</string>
Run Code Online (Sandbox Code Playgroud)

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

  • 这对我来说很有效,但接受的答案却没有. (2认同)

kya*_*y10 14

这个问题可能很旧,但截至目前,最简单的方法是添加引号.例如:

<string name="Toast_Memory_GameWon_part1">"you found ALL PAIRS ! on "</string>
<string name="Toast_Memory_GameWon_part2">" flips !"</string>
Run Code Online (Sandbox Code Playgroud)


And*_*rey 9

可能有不同宽度的空间:

<string name="space_demo">|&#x20;|&#x2009;|&#x200A;||</string>
Run Code Online (Sandbox Code Playgroud)

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

可视化:

在此输入图像描述


Jer*_*gan 8

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

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on\ </string>
<string name="Toast_Memory_GameWon_part2">\ flips !</string>
Run Code Online (Sandbox Code Playgroud)

但是,我会使用字符串格式.类似于以下内容:

<string name="Toast_Memory_GameWon">you found ALL PAIRS ! on %d flips !</string>
Run Code Online (Sandbox Code Playgroud)

然后

String message_all_pairs_found = String.format(getString(R.string.Toast_Memory_GameWon), total_flips);
Run Code Online (Sandbox Code Playgroud)


Bhu*_*shi 5

将""与字符串资源值一起使用.

示例:"带空格的值"

要么

使用\ u0020空间代码.


小智 5

运行良好,我正在使用 \u0020

<string name="hi"> Hi \u0020 </string>
<string name="ten"> \u0020 out of 10  </string>
<string name="youHaveScored">\u0020 you have Scored \u0020</string>
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)

此处的屏幕截图显示此代码的工作的图像