【发布时间】: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() 时,我不会遇到真实数据的问题。