我正在尝试在TextField中格式化字符串,其中包括:删除所有不是数字的字符,使用DecimalFormatter格式化数字并限制TextField中的字符数:
private void IntegerInputChecker() {
ChangeListener<String> integerChecker = new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue,
String newValue) {
String pureValue = newValue;
String formatedText = newValue;
if (pureValue.length() <= 15) {
// Limit the characters in TextField
if (!newValue.matches("\\d*")) {
// Replace everything excepts number
pureValue = newValue.replaceAll("[^\\d]", "");
formatedText = pureValue;
}
if (pureValue.length() > 3) {
// Format number
DecimalFormat formatter = new DecimalFormat( "#,###" );
formatedText = formatter.format(Double.parseDouble(pureValue));
}
else if(pureValue.length() == 3) {
formatedText = pureValue.replaceAll(",", "");
}
}
else {
// Limit the characters in TextField
formatedText = formatedText.substring(0, formatedText.length() - 1);
}
fieldPrice.setText(formatedText);
}
};
fieldPrice.textProperty().addListener(integerChecker);
}
当我输入数字但当我尝试按顺序删除它们时,一切正常,JavaFX会抛出异常(程序仍能正常工作):
java.lang.IllegalArgumentException: The start must be <= the end
例如,当我将数字删除为 123,456 时,如果我有 123,456,789 ,则会抛出上述异常。
提前致谢。