如何仅删除 TextField 中没有文本的行?

Vag*_*ian 1 text textfield dart flutter

我有一些包含多个空行的输入文本,我想在将其放入 TextField 之前仅删除没有文本的行。

例子:

Hello, how are you?
// empty line
// empty line
With you?
Run Code Online (Sandbox Code Playgroud)

我想要的是:

Hello, how are you?
With you?
Run Code Online (Sandbox Code Playgroud)

如何删除空行?

rmt*_*zie 7

您想要做的是在传递之前修改要传递到文本字段的文本。

Dart 有一个replaceAll方法可以解决这个问题并接受正则表达式:

那看起来像:

myinputstring.replaceAll(new RegExp(r'(?:[\t ]*(?:\r?\n|\r))+'), '\n');
Run Code Online (Sandbox Code Playgroud)

尽管您可能需要修改正则表达式。正则表达式正在做的是查找两个或多个换行符的任何序列(处理 \r、\n 和 \r\n),然后将其替换为单个换行符(同样,您可能希望将其更改为 \r \n 或 \r)。

另一种方法是使用拆分和连接。

myinputstring
    .split(new RegExp(r'(?:\r?\n|\r)'))
    .where((s) => s.trim().length != 0)
    .join('\n');
Run Code Online (Sandbox Code Playgroud)

这次我们只是在任何新行上进行拆分,然后检查之间的修剪(以消除空格)部分是否为空,以及它们是否忽略它们,然后将字符串重新连接起来。

请注意,出于性能原因,构建正则表达式对象,将其保存在其他位置(即 const),然后在replaceAll 中使用它可能是一个好主意。我不是 100% 确定 dart 中正则表达式的性能特征,所以它可能没问题;我的 Java 背景表明这始终是推荐的方法。