【问题标题】:How to keep the spaces at the end and/or at the beginning of a String?如何在字符串的末尾和/或开头保留空格?
【发布时间】:2010-12-07 21:46:33
【问题描述】:

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

<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 ; 作为“&”字符??

【问题讨论】:

  • 有一些很好的答案,但没有一个对我有用(请参阅我的 cmets)。赏金是针对任何提供了一种将真实空格字符 (U+0020) 作为字符串资源的第一个或最后一个字符的方法的答案。
  • 讨厌的讨厌的机器人 :(

标签: android string-concatenation


【解决方案1】:

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

例子:

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

使用\u0020 代码作为空格。

【讨论】:

    【解决方案2】:

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

    <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
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        可以有不同宽度的空间:

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

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

        可视化:

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

          • 这很好用。只需将您想要的文本用引号“您的文本”括起来
          • 卡玛尔卡迪亚:D
          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

              这个documentation 建议引用将起作用:

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

              【讨论】:

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

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

              使用&amp;#160; 表示不可破坏的空白。
              &amp;#032; 用于常规空间。

              【讨论】:

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

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

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

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

              【讨论】:

              • 这对我有用,而接受的答案却没有。
              • existing answer 有什么新东西吗?
              【解决方案11】:

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

              【讨论】:

                【解决方案12】:

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

                我在这个问题报告中找到了解决方案: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。
                【解决方案13】:

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

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

                【讨论】:

                  【解决方案14】:

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

                  <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 会导致许多在游戏中不受欢迎的内存分配。
                  • 转义空格(使用 "\ " )对我也不起作用。
                  • 仅当您的文本全部以相同的样式显示时,格式化才有效。在我的情况下,加入的两件事是粗体与正常和不同的颜色。
                  【解决方案15】:

                  它不适用于 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 字符串文字,那么使用资源有什么意义呢?
                  【解决方案16】:

                  我不特别了解 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 似乎被忽略了。
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-07-04
                  • 1970-01-01
                  相关资源
                  最近更新 更多