You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Java开发中endsWith()方法失效问题求助

问题分析与解决办法

嘿,我一眼就瞅出你遇到的问题根源了!你在BtnEqual的逻辑里犯了一个小语法错误,导致不管输入字符串末尾是不是操作符,都会执行删除最后一个字符的操作。

问题所在

看你这段代码:

case R.id.BtnEqual:
    if(Tv.getText().toString().endsWith("+") || Tv.getText().toString().endsWith("-") || Tv.getText().toString().endsWith("*") || Tv.getText().toString().endsWith("/")); 
    {
        Tv.setText(Tv.getText().toString().substring(0, (Tv.getText().toString().length()-1))); //Removing last operator
    }
    break;

注意到if(...)后面的那个分号了吗?这个分号会让if语句的逻辑体变成空语句,后面的大括号代码就变成了无条件执行的独立代码块。也就是说,不管if的条件是否成立,删除最后一个字符的操作都会跑一遍,这就解释了为什么不管末尾是不是操作符都会删字符。

修正后的代码

只需要把那个多余的分号删掉就行,同时我们可以优化一下代码,把字符串先存起来,避免重复调用Tv.getText().toString():

case R.id.BtnEqual:
    String currentText = Tv.getText().toString();
    if(currentText.endsWith("+") || currentText.endsWith("-") || currentText.endsWith("*") || currentText.endsWith("/")) {
        Tv.setText(currentText.substring(0, currentText.length() - 1));
    }
    // 这里可以后续添加运算逻辑
    break;

额外优化建议

你代码里判断是否以操作符结尾的逻辑重复出现了好多次(在各个操作符按钮的点击事件里),可以把这个逻辑抽成一个单独的方法,让代码更简洁易维护:

private boolean endsWithOperator(String text) {
    return text.endsWith("+") || text.endsWith("-") || text.endsWith("*") || text.endsWith("/");
}

这样不管是在操作符按钮还是等于按钮里,都可以直接调用这个方法:

// 比如在BtnAdd里:
if(endsWithOperator(Disp)) {
    Toast.makeText(this, "+ not allowed at this point!", Toast.LENGTH_SHORT).show();
} else {
    Tv.append("+");
}

// 在BtnEqual里:
String currentText = Tv.getText().toString();
if(endsWithOperator(currentText)) {
    Tv.setText(currentText.substring(0, currentText.length() - 1));
}

这样修改后,你的逻辑就会正常工作:只有当末尾是操作符时,才会删除最后一个字符,否则不会执行这个操作,接下来你就可以放心地添加运算逻辑啦。

内容的提问来源于stack exchange,提问作者Anirban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:13:27