首页 > 解决方案 > 从 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());
}

删除文本文件的空行出人意料地解决了这个问题。我不明白问题的原因。有什么解决办法吗?

空字符串

标签: dart

解决方案


该文件可能以 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 也会删除它。


推荐阅读