Метода фильтрации Карты, где регулярное выражение ($)
подобрано:
public Map getVariables(Map<String , String> nvp){
Map map = nvp.entrySet().parallelStream()
.filter(e -> e.getKey().matches("(($.*?))"))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
return map;
}
Setup карту, которая содержит ключ/значение «($ тест)», «тест-значение»:
private Map<String , String> nvp = new HashMap<String , String>();
public void setup(){
nvp.put("($test)", "test value");
}
Добавьте метод, чтобы проверить, что «($ тест)» содержится в карте возвратятся
public void testGetVariables(){
OpDocVariableInsert o = new OpDocVariableInsert();
System.out.println(o.getVariables(nvp).size());
}
Но 0 результаты возврата редактор Я думаю, что мое регулярное выражение неверно?
'$' имеет особое значение в регулярном выражении, вы должны избежать его: '\\ $'. Также обратите внимание, что вам следует избегать '(' и ')', если вы не хотели захватить матч. – Maroun
Примечание '\\ (\\ $ [^)] ++ \\)' будет более эффективным шаблоном, чем использование ленивого '.'. –