Вот пример кода, чтобы исключить некоторые символы из диапазона с помощью 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]
.
Вы должны указать тип входа. Если вы не хотите, чтобы метод принимал какие-либо параметры, определите пустой тип сообщения, например:
message WhoAreYouParams {}
. Причина, по которой это требуется, заключается в том, что если вам позже потребуется добавить необязательный параметр, вы можете сделать это, не нарушая существующий код.
Вы можете указать google.protobuf.Empty
вместо своего собственного пустого сообщения. Пример:
rpc WhoAreYou(google.protobuf.Empty) returns (Whoami) {
}
Не забудьте импортировать соответствующий файл прото:
import "google/protobuf/empty.proto";