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

时间:2019-06-26 17:35:14

标签: text flutter dart textfield

我有一些包含多行空行的输入文本,我只想删除没有文本的行,然后再将其放入TextField。

示例:

Hello, how are you?
// empty line
// empty line
With you?

我想要的是:

Hello, how are you?
With you?

如何删除空白行?

1 个答案:

答案 0 :(得分:1)

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

Dart有一个replaceAll方法,应该可以解决问题,并使用正则表达式:

这看起来像:

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

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

您可以使用的另一种方法是拆分和合并。

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

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

请注意,出于性能原因,构造regex对象,将其保存在其他位置(即const),然后在replaceAll中使用它可能是一个好主意。尽管我不太100%知道dart的正则表达式的性能特征,所以可能还不错。只是我的Java背景表明,这始终是推荐的方法。