需要相当于 String.replaceAll(...) 的绑定

Need bindings equivalent of String.replaceAll(...)

我需要创建一个绑定,使我能够执行与 String.replaceAll(...) 相同的操作,但需要使用绑定。我有一个字符串“${driver} driving ${name}”,我希望将键“${driver}”等替换为特定的 属性。我还希望返回的 属性 能够添加侦听器,因此当 driverProperty 或其他更改时,返回的 属性 值将更改而无需重新调用 getString().

public String getString(Derby derby) {
        String ret;
        if (driverProperty.get().equals("") && nameProperty.get().equals("") && numberProperty.get().equals("") && groupProperty.get().equals("")) {
            ret = "[blank]";
        } else {
            ret = (String) derby.getSettings().get("general.cardisplay").getValue();
            ret = ret.replace("${driver}", driverProperty.get());
            ret = ret.replace("${name}", nameProperty.get());
            ret = ret.replace("${number}", numberProperty.get());
            ret = ret.replace("${group}", groupProperty.get());
        }
        return ret;
    }

使用Bindings.createStringBinding()。这需要一个提供 String 和要观察的值列表的函数;如果这些值中的任何一个发生变化,绑定将被标记为无效。

我不太清楚你的问题,但我认为你可以这样做

StringBinding formattedString = Bindings.createStringBinding(
    () -> getString(derby), 
    derby.settingsProperty(), 
    nameProperty, numberProperty, 
    driverProperty, groupProperty);

现在您可以执行以下操作

formattedString.addListener((obs, oldFormattedString, newFormattedString) -> {
    // invoked any time the formatted string changes...
});

Label label = new Label();
label.textProperty().bind(formattedString);