gpt4 book ai didi

java - EditText 无法将文本设置为格式化字符串

转载 作者:行者123 更新时间:2023-12-02 08:44:09 25 4
gpt4 key购买 nike

我想在每次输入后格式化我的 EditText。(例如:用户输入 1234,我更正为 1.234,00)

使用此函数,我可以正确格式化字符串,并且可以在 Toast 消息上看到它。但每当我尝试将文本设置为 edittext 时,输入第二个数字后就会出现错误。

这是我的格式函数:

 public String moneySeperator(double moneyAmount){
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator('.');
symbols.setDecimalSeparator(',');

DecimalFormat decimalFormat = new DecimalFormat("#,###.00", symbols);
String prezzo = decimalFormat.format(moneyAmount);

return prezzo;
}

这是我的 EditText 监听器:

  editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {


}

@Override
public void afterTextChanged(Editable editable) {
editText.removeTextChangedListener(this);
if(!editText.getText().toString().isEmpty()){

String userInput = editText.getText().toString();

Toast.makeText(Denemey.this, ""+moneySeperator(Double.parseDouble(userInput)), Toast.LENGTH_SHORT).show();
editText.setText(""+moneySeperator(Double.parseDouble(userInput)));
}
editText.addTextChangedListener(this);
}
});

这是错误: (它指向 editText.setText 行)

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.incidijital.kdvtevkifati, PID: 7500
java.lang.NumberFormatException: For input string: "15,00"
at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306)
at java.lang.Double.parseDouble(Double.java:547)
at com.myproject.dd$1.afterTextChanged(Denemey.java:46)

更新:我让我的代码变得更短。当我尝试像 1234.50 这样的双倍时它在打印方面效果很好,但我认为 afterTextChanged 监听器有问题。我的前 4 种类型(例如:1,234)运行良好,在添加更多类型后,由于 Double.parseDouble 转换而崩溃,但没有逗号。我删除了格式化程序功能。

@Override
public void afterTextChanged(Editable editable) {


editText.removeTextChangedListener(this);
java.text.NumberFormat formatter = java.text.NumberFormat.getInstance(java.util.Locale.GERMANY);


if(!editText.getText().toString().isEmpty()){
double myDob = Double.parseDouble(""+editable);
editText.setText(""+(formatter.format(myDob)));
editText.setSelection(editText.getText().length());
}

editText.addTextChangedListener(this);
}
});

最佳答案

在将其解析为 double 之前,您必须删除所有非数字字符。我在这里假设您的 #moneySeperator 对于 format 工作正常。

editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
editText.removeTextChangedListener(this);
String userInput = editText.getText().toString().replaceAll("[^0-9]", "");
if(!userInput.isEmpty()){
Toast.makeText(Denemey.this, ""+moneySeperator(Double.parseDouble(userInput)), Toast.LENGTH_SHORT).show();
editText.setText(""+moneySeperator(Double.parseDouble(userInput)));
}else{
editText.setText("")
}
editText.addTextChangedListener(this);
}
});

关于java - EditText 无法将文本设置为格式化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61193443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com