如何在Dart中解析和转换文本

  • 本文关键字:转换 文本 Dart dart
  • 更新时间 :
  • 英文 :


我有一个来自API的文本,如下所示:

房间内的温度为[{50°}{F}]

如何解析括号中的文本(读取括号内的值并移除括号(并将其转换为摄氏度?

所以结果看起来像这个

房间内的温度为10°C

如果您总是使用与[{number}{F}]相同的格式,则可以使用这些行拆分字符串并将其转换为celsius:

String temp= "The temperature in the room is [{50°}{F}]";
double fahreneit=double.parse(temp.split("[")[1].split("{")[1].split("°")[0]);
double celsius= (fahreneit-32)*5/9;
print ("The temperature in the room is $celsius° C");

这看起来确实是最好由RegExp处理的事情。

RegExp _tempRE = RegExp(r"[{(-?d+(?:.d+)?)°}{([CF])}]");
String convertTemperaturesToCelsius(String input) {
return input.replaceAllMapped(_tempRE, (m) {
var temp = m[1];
var scale = m[2];
if (scale == "C") return "$temp° C";
assert(scale == "F");
var fahrenheit = double.parse(temp);
var celsius = fahrenheitToCelsius(fahrenheit);
var dot = temp.indexOf('.');
var decimals = dot < 0 ? 0 : temp.length - dot - 1;
var celsiusString = celsius.toStringAsFixed(decimals);
return "$celsiusString° C";
});
}
double fahrenheitToCelsius(num fahrenheit) => (fahrenheit - 32) * 5 / 9;
// Example:
main() {
var s = "ab [{50°}{F}] cd[{50.25°}{C}]..[{-12°}{F}]";
print(convertTemperaturesToCelsius(s));
}

我选择在数字上允许小数,并使用与输入相同的小数进行输出,并将{C}{F}都识别为原始温度。您的详细信息可能会有所不同。

最新更新