我最近在我的应用程序中添加了一个方法,它将自动格式化textview,让我们说:“50000”到“50,000”,这绝对是完美的。现在我遇到的问题是,在我的应用程序中有多个按钮功能,从该文本视图中添加或删除一定数量,所以我们只需说textview =“5,000”,当你点击按钮时它会删除“1000” 问题是它强制关闭app,因为textview在技术上不再是一个整数,它是一个字符串。这是代码和错误。
//formats the textview to show commas
double number = Double.parseDouble(textView1.getText().toString());
DecimalFormat formatter = new DecimalFormat("###,###,###");
textView1.setText(formatter.format(number));
Button btnremove1000 = (Button) findViewById(R.id.btnremove1000);
btnremove1000.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView textView1 = (TextView) findViewById(R.id.textView1);
int amount = Integer.parseInteger(textView1.getText()
.toString()) - 1000;
textView1.setText(String.valueOf(amount));
Toast msg = Toast.makeText(MainScreen.this,
"1,000 removed!", Toast.LENGTH_SHORT);
msg.show();
}
});
java.lang.NumberFormatException: Invalid int: "5,000"
现在我怎么能这样做,所以我仍然可以显示逗号但是添加和删除值?
我唯一能想到的是以某种方式删除逗号,添加/删除一个值,然后重新格式化它以再次显示逗号?
答案 0 :(得分:2)
替换它:
int amount = Integer.parseInteger(textView1.getText().toString()) - 1000;
使用:
String fromTV = textView1.getText().toString();
String commaRemoved = fromTV.replace(",", "");
int amount = Integer.parseInteger(commaRemoved) - 1000;
在一行中:
int amount = Integer.parseInteger(
textView1.getText().toString().replace(",", "")) - 1000;
修改:根据Eng.Fouad的建议,使用replace()
代替replaceAll()
。
答案 1 :(得分:1)
使用DecimalFormat.parse()
方法,首先使用您用于格式化字符串的DecimalFormatter
。
答案 2 :(得分:0)
作为一般规则,您不应将数据存储在视图中。
尽量保持分开。
int amount = 5000000;
textView.setText(formatter.format(amount));
button.setOnClickListener(new OnclickListener(){
public void onClick(View view){
amount -= 1000;
textView.setText(formatter.format(amount));
}
});
此处数据存储在视图之外,易于管理。数据只能朝着一个方向进入视图。
答案 3 :(得分:0)
使用以下代码替换int amount = Integer.parseInteger(textView1.getText().toString()) - 1000;
此行: -
String strText = textView1.getText().reaplace(",","");
int amount = Integer.parseInteger(strText) - 1000
还有一件事你不需要指定###,###,###这样的格式。如果使用##,###就足够了。