dart - 从 txt 文件读取会导致长度为 1 的空字符串
问题描述
我正在读取一个有两行的 txt 文件,第一行包含数字,后跟一个空格。第二行只是空的。
1 2 3
使用下面的代码读取文件会导致错误 ( FormatException
)。根据调试器(见下文),的第四个元素tmp
是一个空字符串,但根据 print 语句,长度为 1,并且未被removeWhere()
.
import 'dart:io';
void main() async {
String filename = "text.txt";
String content = await File("$filename").readAsString();
List<String> lines = content.split("\n");
List<String> tmp = lines[0].split(" ");
tmp.removeWhere((element) => element.isEmpty);
print(tmp[3].length);
print(tmp.map((e) {
return int.parse(e);
}).toList());
}
删除文本文件的空行出人意料地解决了这个问题。我不明白问题的原因。有什么解决办法吗?
解决方案
该文件可能以 CR LF 行结尾(Windows 格式)存储。CR LF 是'\r\n'
。行被 分割'\n'
,所以lines[0]
也是'1 2 3 \r'
。
使用 LF 行结尾(Unix 格式)存储文本文件,在拆分之前替换 all '\r\n'
in content
,'\n'
或者使用LineSplitter,它接受所有行结尾(CR、LF 和 CR LF),或者直接使用 readAsLines 方法。如果最后一行为空,LineSplitter 和 readAsLines 也会删除它。
推荐阅读
- filebeat - 来自 filebeat 的 Cognito 身份验证
- java - 从数据库创建对象后初始化瞬态字段?
- javascript - 执行一次鼠标悬停事件后解除它
- jenkins - 使用主动选择反应参考参数构建项目
- java - Gson 解析响应以获取通用类
- android - BattlegroundMobile之类的应用如何在没有存储权限的情况下访问obb?
- vba - WebBrowser 控件适用于 Office 2010,但不适用于 Office 365 / 2016
- html - HTML CSS 悬停位置未与容器对齐
- redhat - Linux中的SWAP和Virtual mmeory有什么区别
- sql - 变更数据捕获 - 监控单列