Как удалить только те строки, которые не имеют текста в TextField? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть некоторый входной текст, который содержит несколько пустых строк, и я хочу удалить только те строки, у которых нет текста, прежде чем поместить его в текстовое поле.

Пример:

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

И что я хочу, это:

Hello, how are you?
With you?

Как я могу удалить пустые строки?

1 Ответ

1 голос
/ 26 июня 2019

То, что вы хотите сделать, это изменить текст, который вы передаете в текстовое поле, прежде чем передать его.

Дарт имеет метод replaceAll , который должен выполнить трюк и принятьв регулярном выражении:

Это будет выглядеть примерно так:

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

, хотя вам, возможно, придется изменить регулярное выражение.Регулярное выражение ищет любую последовательность из двух или более символов новой строки (обрабатывая оба \ r, \ n и \ r \ n), а затем заменяя ее одной строкой (опять же, вы можете изменить это на \ r\ n или \ r).

Еще один способ сделать это с помощью split и join.

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

На этот раз мы просто разбиваем любую новую строку, а затем проверяем, чтобы увидетьесли обрезанные (чтобы избавиться от пробела) промежуточные части пусты, и если они игнорируют их, а затем присоединяют строку обратно.

Обратите внимание, что по соображениям производительности может быть хорошей идеей создатьобъект regex, сохраните его где-нибудь еще (т.е. const), а затем просто используйте его в replaceAll.Я не уверен на 100% в характеристиках регулярных выражений в dart, хотя, возможно, все будет хорошо;только мой опыт в Java говорит, что это всегда рекомендуемый подход.

...