Android中使用equals、equalsIgnoreCase、compareTo比较字符串失效求助
嘿,作为Android新手碰到字符串比较的问题太正常啦!我刚入门的时候也在这上面栽过好几次跟头~咱们来一步步排查你可能遗漏的关键细节:
小心空指针炸锅!
如果你的其中一个字符串是null,直接调用equals()/equalsIgnoreCase()/compareTo()会直接抛出空指针异常!比如你从activity_play.xml里的输入框取文本时,万一输入框是空的,getText().toString()会不会返回null?建议把常量放在前面来调用equals,比如写成"你要比较的目标字符串".equals(你的变量),这样哪怕右边是null也不会报错。千万别搞混
==和equals()
这是新手最容易犯的错误!==比较的是两个字符串对象的内存地址,而equals()才是比较字符串的实际内容。哪怕两个字符串内容完全一样,只要是不同的对象,==都会返回false,一定要用equals()或者equalsIgnoreCase()来比内容。记得给输入文本去首尾空格!
如果你是从activity_play.xml里的EditText获取字符串,用户输入时很可能不小心多打了空格(比如开头、结尾),比如你拿到的是"hello "(带空格),和"hello"当然比不相等!记得加个.trim():editText.getText().toString().trim(),把多余的空格去掉再比较。搞懂
compareTo()的返回值逻辑compareTo()不是返回true/false哦!它返回的是一个整数:两个字符串相等时返回0,调用者比目标字符串小返回负数,大则返回正数。如果你写成if (str1.compareTo(str2))会直接报错,因为条件需要布尔值,正确写法是if (str1.compareTo(str2) == 0)来判断相等。检查资源字符串的隐形坑
如果你用的是getString(R.string.xxx)来获取字符串,要确保strings.xml里的目标字符串没有多余的空格、换行或者特殊隐形字符——有时候复制粘贴会带这些看不见的内容,导致看起来内容一样但比较失败。
假设你布局里有个id为input_et的EditText,正确的比较写法应该是这样:
// 从布局里获取输入框 EditText inputEt = findViewById(R.id.input_et); // 取文本并去除首尾空格 String inputContent = inputEt.getText().toString().trim(); // 安全的equalsIgnoreCase写法 if ("预期的文本内容".equalsIgnoreCase(inputContent)) { // 这里写你的逻辑 } // 用compareTo判断相等的写法 if (inputContent.compareTo("预期的文本内容") == 0) { // 这里写你的逻辑 }
内容的提问来源于stack exchange,提问作者HelloWorld1

