【问题标题】:Replace $ with \$ in string for Dart consumption (not raw)将 $ 替换为字符串中的 \$ 以用于 Dart 消费(非原始)
【发布时间】:2018-12-23 02:19:13
【问题描述】:

这似乎是一个简单的问题,但我无法弄清楚。

我在 JSON 对象中有一个字符串,该字符串是从另一种语言生成的,其中包含转义字符和美元符号(应解释为美元符号)。当我在 Dart 中使用这个字符串时,它会抱怨 $ 因为它认为它是一个变量。在字符串前面添加 r 以将字符串解释为原始字符串是不够的,因为它不会解释任何其他转义字符。

例如,给定以下字符串:

line 1 costs $250 and\nline 2 costs $300

我需要将它转换成这个,以便我可以在 Dart 中使用它:

line 1 costs \$250 and\nline 2 costs \$300

我还想为我的转换器创建此条件的测试。

我没有运气尝试了以下方法:

String s2 = s1.replaceAll(RegExp(r'\$'),r'\$');

为了测试:

expect(s1, contains('\$'));
expect(s2, contains('\\\$'));

有什么建议吗?

【问题讨论】:

  • 你是如何加载字符串的?如果是在源文件中定义的,直接在编辑器中替换美元符号不是更简单吗?
  • @ViniciusPinto,它通过 JSON 文件从任意数量的用户作为遗留数据加载。这就是为什么我需要一个通用的解决方案。谢谢。
  • 你是如何加载 JSON 的? AFAIK 插值仅适用于源中声明的字符串(例如,如果我使用来自 dart:convert 的jsonDecode(),它不关心字符串中的 $)。
  • @ViniciusPinto,感谢您为我指明正确的道路。我在模拟一些数据,刚刚复制/粘贴了 json 数据,不得不手动将 $ 更改为 \$,但现在我发现当我 jsonDecode() 时,我不会遇到真实数据的问题。

标签: dart flutter


【解决方案1】:

正如@ViniciusPinto 所指出的,使用jsonDecode() 可以避免这个问题。

【讨论】:

    【解决方案2】:

    如果字符串来自 JSON,则 Dart 不会进行插值。

    插值仅适用于 Dart 源代码中的字符串。在您的情况下无需替换 $

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-01
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 2013-06-08
      • 1970-01-01
      相关资源
      最近更新 更多