Цель состоит в том, чтобы заменить double типом функции распределения, то есть преобразовать строки, подобные этой
0.5 * x + 0.5 * y
, в строку типа:
IntPMF[(0;0.5)(1;0.5)] * x + IntPMF[(0;0.5)(1;0.5)] * y
Я написал следующее функция:
public static String replaceDoubles(String stoEx) {
Pattern p = Pattern.compile("(\\d+(?:\\.[0-9]\\d*))");
Matcher m = p.matcher(stoEx);
while (m.find()) {
double d = Double.parseDouble(m.group(1));
String dStr = String.valueOf(d);
String[] parts = dStr.split("\\.");
int lower = Integer.valueOf(parts[0]);
int upper = lower + 1;
double decimalPart = d - lower;
decimalPart = round(decimalPart, 2);
double rest = round(1 - decimalPart, 2);
String replacement = "IntPMF[(" + lower + ";" + rest + ")(" + upper + ";" + decimalPart + ")]";
stoEx = stoEx.replaceAll(m.group(1), replacement);
}
return stoEx;
}
Проблема в том, что с этой функцией я получаю следующий вывод (для вышеупомянутой строки):
IntPMF[(0;IntPMF[(0;0.5)(1;0.5)])(1;IntPMF[(0;0.5)(1;0.5)])] * x + IntPMF[(0;IntPMF[(0;0.5)(1;0.5)] (1;IntPMF[(0;0.5)(1;0.5)])] * y
Двойники 0,5 заменяются несколько раз ...
Буду признателен за любые предложения по решению. Спасибо!