Protobuf RPC Сервисный метод без параметров

Вот пример кода, чтобы исключить некоторые символы из диапазона с помощью Lookahead и Lookbehind Zero-Length Assertions , которые на самом деле не потребляют символы в строке, а только утверждают, возможно ли совпадение или нет.

Пример кода: (исключить m и n из диапазона a-z)

    String str = "abcdmnxyz";
    Pattern p=Pattern.compile("(?![mn])[a-z]");
    Matcher m=p.matcher(str);
    while(m.find()){
        System.out.println(m.group());
    }

вывод:

a b c d x y z

В так же, как вы можете это сделать.

Объяснение Regex (?![mn])[a-z]

  (?!                      look ahead to see if there is not:   
    [mn]                     any character of: 'm', 'n' 
  )                        end of look-ahead    
  [a-z]                    any character of: 'a' to 'z'

Вы можете разделить весь диапазон в поддиапазонах и решить эту проблему с помощью ([a-l]|[o-z]) или [a-lo-z].

29
задан Michael Robinson 16 April 2015 в 22:44
поделиться

2 ответа

Вы должны указать тип входа. Если вы не хотите, чтобы метод принимал какие-либо параметры, определите пустой тип сообщения, например:

message WhoAreYouParams {}

. Причина, по которой это требуется, заключается в том, что если вам позже потребуется добавить необязательный параметр, вы можете сделать это, не нарушая существующий код.

47
ответ дан Kenton Varda 16 April 2015 в 22:44
поделиться

Вы можете указать google.protobuf.Empty вместо своего собственного пустого сообщения. Пример:

rpc WhoAreYou(google.protobuf.Empty) returns (Whoami) {
}

Не забудьте импортировать соответствующий файл прото:

import "google/protobuf/empty.proto";
17
ответ дан victorkohl 16 April 2015 в 22:44
поделиться
Другие вопросы по тегам:

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