String template = "key1=value1&key2=value2&key3=value3";
String pattern = "&?([^&]+)=";
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(template);
while (m.find())
{
System.out.println(m.group(1)); //prints capture group number 1
}
Выход:
key1
key2
key3
Конечно, это может быть сокращен до:
Matcher m = Pattern.compile("&?([^&]+)=").matcher("key1=value1&key2=value2&key3=value3");
while (m.find())
{
System.out.println(m.group(1)); //prints capture group number 1
}
Разбивка:
"&?([^&]+)=";
&?
: говорит, 0 или 1 &
[^&]+
матчи 1 или более символов не равно &
([^&]+)
захватывает вышеуказанные символы (позволяет им извлекать)
&?([^&]+)=
захватывает вышеуказанные символы таким образом, что они начинаются с 0 или 1 &
и заканчиваются =
NB: несмотря на то, что мы не исключаем =
в [^&]
, это выражение работает, потому что если он может соответствовать что-нибудь с =
знаком в нем, эта строка также будет иметь "& ', поэтому [^&=]
не требуется.
Нужно ли вашему классу хранить ключи или значения для ключей? – Pshemo
@vivek, если вы не хотите использовать split, проверьте мой ответ (с помощью regex). –
Просто интересно, что может быть причиной не использования split? Это задание? –