Как заменить плейсхолдеры на конкретные числа?
Пример: Совершен перевод ${payment_amount} рублей. На счету осталось ${balance} рублей.
public String replacePlaceholders(double paymentAmount, double balance) {
File file = new File(
"data.txt");
try (Scanner scanner = new Scanner(file)) {
while (scanner.hasNextLine()) {
String regexPaymentAmount = "[$]{1}[{]{1}[a-z]{7}[_]{1}[a-z]{6}[}]{1}";
String regexBalance = "[$]{1}[{]{1}[a-z]{7}[}]{1}";
String line = scanner.nextLine();
Pattern pattern1 = Pattern.compile(regexPaymentAmount);
Pattern pattern2 = Pattern.compile(regexBalance);
Matcher matcher1 = pattern1.matcher(line);
Matcher matcher2 = pattern2.matcher(line);
String result1 = matcher1.replaceAll(Double.toString(paymentAmount));
String result2 = matcher2.replaceAll(Double.toString(balance));
return null; //Нужна результирующая строка с заменой двух плейсхолдеров;
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
Ответы (2 шт):
Автор решения: Alexey R.
→ Ссылка
можно просто использовать стандартный replace стринга. Например так:
public String replacePlaceholders(double paymentAmount, double balance){
String base = "Совершен перевод ${payment_amount} рублей. На счету осталось ${balance} рублей.";
return base
.replace("${payment_amount}", String.valueOf(paymentAmount))
.replace("${balance}", String.valueOf(balance));
}
UPD: вариант с регулярками:
public String replacePlaceholders(double paymentAmount, double balance){
String base = "Совершен перевод ${payment_amount} рублей. На счету осталось ${balance} рублей.";
Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}");
Matcher matcher = pattern.matcher(base);
while(matcher.find()){
String propName = matcher.group(1);
String propValue;
switch (propName){
case "payment_amount": propValue = String.valueOf(paymentAmount); break;
case "balance": propValue = String.valueOf(balance); break;
default: throw new IllegalArgumentException("Cannot parse input string string");
}
base = base.replace(matcher.group(), propValue);
}
return base;
}
Автор решения: Alexander Mashin
→ Ссылка
Как насчёт
Matcher matcher1 = pattern1.matcher(line);
String result1 = matcher1.replaceAll(Double.toString(paymentAmount));
Matcher matcher2 = pattern2.matcher(result1);
String result2 = matcher2.replaceAll(Double.toString(balance));
return result2;
?