регулярное выражение для замены два (или больше) последовательные символы только одним?

Вы можете окружить свой скаффолд на странице 2 с помощью WillPopScope, установить для onWillPop значение false, чтобы предотвратить появление страницы системой, а затем добавить собственную кнопку «назад» в ведущий виджет панели приложения и выполнить в ней всплывающее окно. ]

@override
Widget build(BuildContext context) {
  return new WillPopScope(
    onWillPop: () async => false,
    child: new Scaffold(
      appBar: new AppBar(
        title: new Text("data"),
        leading: new IconButton(
          icon: new Icon(Icons.ac_unit),
          onPressed: () => Navigator.of(context).pop(),
        ),
      ),
    ),
  );
}

код для ответа от этого поста

Редактировать: дополнение к странице 2 для управления навигацией

В дополнение к Код выше, вы добавите код ниже на страницу 2. Измените

Navigator.of(context).pop() 

на

Navigator.of(context).pop('upload_files')

Затем на странице 1, где вы будете перемещаться, вы будете ждать навигации и использовать Результат возвращается из всплывающего окна на странице 2 и запускайте вашу логику

var navigationResult = await Navigator.push(
        context,
        new MaterialPageRoute(
            builder: (context) => Page2()));


 if(navigationResult == 'upload_files') {
    uploadFiles(); // Perform your custom functionality here.
 }

20
задан Michael Carman 20 September 2008 в 02:16
поделиться

7 ответов

В жемчуге

s/(.)\1+/$1/g;

Добивается цели, я принимаю, имеет ли Java жемчуг совместимый regexps, он должен работать также.

Редактирование: Вот то, что это означает

s {
    (.)  # match any charater ( and capture it )
    \1   # if it is followed by itself 
    +    # One or more times
}{$1}gx;  # And replace the whole things by the first captured character (with g modifier to replace all occurences)

Редактирование: Как другие указали, синтаксис в Java стал бы

original.replaceAll("(.)\\1+", "$1");

, не забывают выходить \1

36
ответ дан 29 November 2019 в 22:53
поделиться
String a = "aaabbb";
String b = a.replaceAll("(.)\\1+", "$1");
System.out.println("'" + a + "' -> '" + b + "'");
17
ответ дан 29 November 2019 в 22:53
поделиться
"14442345".replaceAll("(.)\\1+", "$1");
4
ответ дан 29 November 2019 в 22:53
поделиться

шаблон соответствия (в Java/языках, где \должен быть оставлен):

(.)\\1+

или (на языках, где можно использовать строки, которые не рассматривают \как символ ESC)

(.)\1+ 

замена :

$1
1
ответ дан 29 November 2019 в 22:53
поделиться
originalString.replaceAll( "(.)\\1+", "$1" );
3
ответ дан 29 November 2019 в 22:53
поделиться

В Perl:

tr/a-z0-9//s;

Пример:

$ perl -E'@a = (aaabbb, 14442345); for(@a) { tr/a-z0-9//s; say }'
ab
142345 

, Если Java не имеет никакого tr аналог затем:

s/(.)\1+/$1/sg; 
#NOTE: `s` modifier. It takes into account consecutive newlines.

Пример:

$ perl -E'@a = (aaabbb, 14442345); for(@a) { s/(.)\1+/$1/sg; say }'
ab
142345 
0
ответ дан 29 November 2019 в 22:53
поделиться

в TextEdit (принимающий posix выражения) найдите: + [b] + заменяют: ab

0
ответ дан 29 November 2019 в 22:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: