Редактировать: OP помечен Java
вместо JavaScript
.Поскольку синтаксис var
одинаков, мы все запутались.
Подход с использованием Stream
может быть
final String input = "s_ev14=cid=extCid-1:med=extMid-2:source=google:scode=RSG00000E017:campdesc=123456789";
final Map<String, String> attributes =
Stream.of(input.substring(7).split(":"))
.map(s -> s.split("=", 2))
.filter(o -> o.length > 1) // If you don't want empty values
.collect(Collectors.toMap(o -> o[0], o -> o[1]));
Вывод
{scode=RSG00000E017, campdesc=123456789, source=google, med=extMid-2, cid=extCid-1}
Если вам нужно присвоить каждое значение ряду переменных, просто
final var cid = attributes.get("cid");
final var med = attributes.get("med");
final var source = attributes.get("source");
final var campdesc = attributes.get("campdesc");
Используется синтаксис Java 10
+, который, кажется, вы тоже используете.
Для JavaScript
версии
const input = "cid=extCid-1:med=extMid-2:source=:scode=RSG00000E017:campdesc=123456789"
// Default values
const dictionary = {
cid: '',
med: '',
source: '',
code: '',
campdesc: ''
}
const result =
input.split(":") // <-- Change the separator to & if needed
.map(s => s.split("="))
.filter(o => !!o[1])
.reduce((dictionary, o) => {
dictionary[o[0]] = o[1]
return dictionary
}, dictionary) // <-- Default values as starting point
const cid = result['cid']
const med = result['med']
const source = result['source']
const code = result['code']
const campdesc = result['campdesc']
Выход
{cid: "extCid-1", med: "extMid-2", scode: "RSG00000E017", campdesc: "123456789"}