У меня есть строка SELECT *FROM USERS WHERE ID = '@userid@' AND ROLE = '@role@'
Теперь я должен заменить любую строку между @ ... @ действительным значением.
Ожидаемый результат SELECT *FROM USERS WHERE ID = '4' AND ROLE = 'Admin'
Эта замена произойдет из метода, я написал эту логику
public String replaceQueryKeyWithValueFromKeyValues(String query, int reportId) {
try {
REPMReportDao repmReportDao = new REPMReportDao();
int Start = 0;
int end;
if (query.contains("@")) {
boolean specialSymbolFound = false;
for (int i = 0; i < query.length(); i++) {
if (query.charAt(i) == '@') {
if (!specialSymbolFound) {
Start = i + 1;
specialSymbolFound = true;
} else {
specialSymbolFound = false;
end = i;
query = query.replace(query.substring(Start - 1, end + 1), repmReportDao.getReportManagerKeyValue(query.substring(Start - 1, end + 1).replaceAll("@", ""), reportId));
}
}
}
return query;
} else {
return query;
}
} catch (Exception e) {
logger.log(Priority.ERROR, e.getMessage());
return e.getMessage();
}
}
Он работает нормально, но в случае, если одинСимвол '@' существует вместо начала и конца, он потерпит неудачу.Например:
SELECT *FROM USERS WHERE emailid = 'xyz@gmail.com' AND ROLE = '@role@'
Здесь он должен заменить единственную роль '@ role @' и оставить сообщение электронной почты без изменений.
Ожидаемый результат => SELECT *FROM USERS WHERE emailid = 'xyz@gmail.com' AND ROLE = 'Admin'