如何将EditText中的文本转换为整数变量

时间:2014-06-15 19:41:13

标签: java android

我试图从EditText中获取文本的值作为整数,但是我发现每次插入任何值时它都会从catch中计算出初始值,那么解决了什么问题呢?问题

结果变为= 0

    public Button bu,bu2,bu3,bu4,bu5;
int num=0,num2=0,num3=0,result=0;
public EditText on,on2,on3,on4;
public TextView tex  ;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_monthlycalc);

    bu=(Button)findViewById(R.id.year);
    bu.setOnClickListener(this);

    bu2=(Button)findViewById(R.id.calc);
    bu2.setOnClickListener(this);

    bu3=(Button)findViewById(R.id.reset);
    bu3.setOnClickListener(this);

    bu4=(Button)findViewById(R.id.H1);
    bu4.setOnClickListener(this);

    bu5=(Button)findViewById(R.id.ron);
    bu5.setOnClickListener(this);


    try {
        on=(EditText)findViewById(R.id.loanAm);
        num=Integer.valueOf(on.getText().toString().trim());
    } catch (NumberFormatException e) {
        num=0;
    }

    try {
        on2=(EditText)findViewById(R.id.intRate);
        num2=Integer.valueOf(on2.getText().toString().trim());
    } catch (NumberFormatException e) {
        num2=0;
    }

    try {
        on3=(EditText)findViewById(R.id.lonTerm);
        num=Integer.valueOf(on3.getText().toString().trim());
    } catch (NumberFormatException e) {
        num3=0;
    }
    tex  = (TextView) findViewById(R.id.monPay);
    result=num+num2+num3;
@Override
public void onClick(View v)
{
    if (v.getId()==R.id.calc)
        tex.setText(String.valueOf(result));    
}

2 个答案:

答案 0 :(得分:0)

因为你的String中可能有Chars或Whitespaces,而不是数字。

使用正则表达式解析它。

final Pattern pattern = Pattern.compile("\\d+"); // the regex
final ArrayList<Integer> ints = new ArrayList<Integer>(); // results
while (matcher.find()) { // for each match
   ints.add(Integer.parseInt(matcher.group())); // convert to int 
}

如果你真的想删除所有空格,请不要使用trim。使用

st.replaceAll("\\s+","")

删除所有标签

并且确保在单击按钮时抓住您的值,而不是之前,因为在初始化时它没有任何值,如果你没有定义defaultValue。

答案 1 :(得分:0)

将代码移至onClick 您正试图获取onCreate内的值,这些值在启动活动时发生且所有EditText都为空,将其放在onClick内并且它将起作用:)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_monthlycalc);
    bu=(Button)findViewById(R.id.year);
    bu.setOnClickListener(this);
    bu2=(Button)findViewById(R.id.calc);
    bu2.setOnClickListener(this);
    bu3=(Button)findViewById(R.id.reset);
    bu3.setOnClickListener(this);
    bu4=(Button)findViewById(R.id.H1);
    bu4.setOnClickListener(this);
    bu5=(Button)findViewById(R.id.ron);
    on=(EditText)findViewById(R.id.loanAm);
    on2=(EditText)findViewById(R.id.intRate);
    on3=(EditText)findViewById(R.id.lonTerm);
    tex  = (TextView) findViewById(R.id.monPay);
}


@Override
public void onClick(View v)
{
    try {
        num=Integer.valueOf(on.getText().toString().trim());
    } catch (NumberFormatException e) {
        num=0;
    }

    try {
        num2=Integer.valueOf(on2.getText().toString().trim());
    } catch (NumberFormatException e) {
        num2=0;
    }

    try {
        num=Integer.valueOf(on3.getText().toString().trim());
    } catch (NumberFormatException e) {
        num3=0;
    }
    result=num+num2+num3;
    if (v.getId()==R.id.calc)
        tex.setText(String.valueOf(result));    
}