ChatGPT解决这个技术问题 Extra ChatGPT

如何在字符串的末尾和/或开头保留空格?

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

<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 ; 用于“&”特点 ??

有一些很好的答案,但没有一个对我有用(见我的评论)。赏金适用于任何提供获取真实空格字符 (U+0020) 作为字符串资源的第一个或最后一个字符的方法的答案。
讨厌的讨厌的机器人:(

T
Tot Zam

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

&#160; 用于不可破坏的空格。
&#032; 用于常规空格。


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

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

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

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

例子 :

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

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


效果很好。想知道使用它和   有什么区别
@androiddeveloper, \u 表示一个Unicode字符作为转义序列(不是直接在文件中的Unicode字符)。 &#nnn;表示一个 html 实体,这意味着您依赖于您的 xml 字符串被 html 解析(在文本视图中使用时默认情况下)。请参阅w3schools.com/html/html_entities.asp
@greg7gkb 有趣,但我不知道它是默认的。你的意思是,如果我在字符串资源上使用“setText”,它的工作原理是一样的吗?
@androiddeveloper 是的,我刚刚在代码中确认了这一点。您可以在字符串 xml 文件中包含 html 实体,默认情况下它们将使用 setText(int resId) 进行转换。示例:T S T 
\u0020 是 ASCII 码的空格。这是我项目的最佳选择,因为我必须确保它是 ASCII。
R
Rahul Sharma

documentation 建议引用将起作用:

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

是否保证<string name="my_str_spaces">" Before <b>and</b> after? "</string>
像这样比使用 unicode 字符还多!谢谢!
不幸的是,一些本地化工具,如 Passolo,会在引用前自动添加斜杠。而字符串变成了这样:\"之前和之后?\"。因此,此引号出现在文本中。所以在这种情况下使用 \u0020 似乎更好。
我在文档中的任何地方都没有看到这一点。我能看到的最接近的是 Enclose the entire string in double quotes ("This'll work", for example),它讨论了转义 Single quote (')
J
Jasen

我只是在 strings.xml 文件中使用空间“\u0020”的 UTF 代码。

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

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


在接受的答案没有的情况下,这对我有用。
existing answer 有什么新东西吗?
k
kyay10

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

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

这完美地工作。只需用引号“您的文本”将您想要的文本括起来
卡马尔·卡迪亚:D
A
Andrew

可以有不同宽度的空间:

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

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

可视化:

https://i.stack.imgur.com/QJeF4.png


H
Harshad Pansuriya

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

例子 :

<string>"value with spaces"</string>

或者

对空格使用 \u0020 代码。


J
Jeremy Logan

如果您真的想按照自己的方式进行操作,那么我认为您必须通过转义来告诉它空格是相关的:

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

用反斜杠转义不起作用(至少对我来说)。使用格式字符串通常是一个很好的解决方案,但并非总是如此。例如,String.format 会导致许多在游戏中不受欢迎的内存分配。
转义空格(使用 "\ " )对我也不起作用。
仅当您的文本都以相同的样式显示时,格式化才有效。在我的情况下,加入的两件事是粗体与正常和不同的颜色。
T
Tarsbir Singh

运行良好,我正在使用 \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


E
Etienne Lawlor

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

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

M
MPelletier

可以进行参数以编程方式添加空间。由于这些情况将经常用于连接,我决定停止疯狂,只做旧的+ " " +。这些在大多数欧洲语言中都是有意义的,我想。


P
Pavel Minaev

我不特别了解 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:space 似乎被忽略了。
S
Skusku

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

a
android developer

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

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

但总的来说,我认为 \u0020 已经足够好了。


T
TheIT

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

<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

H
Hubert

它不适用于 xml:space="preserve"

所以我以最快的方式做到了 =>

我只是在需要的地方添加了一个 +" "+ ...

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

如果您只是要混合一些 Java 字符串文字,那么使用资源有什么意义呢?