这太奇怪了。我只是比较两个相同的字符串,但它们没有正确比较。 text
是我从用户对话中提取的字符串(它被修剪):
String compareThis = sharedPrefs.getString("key", "default").toLowerCase().trim();
if (text.equals(compareThis)){
Toast.makeText(lol, "Good, strings matched :)", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context, "Should be " +text +" Not " +compareThis, Toast.LENGTH_SHORT).show();
}
现在看,这段代码看起来很简单,但即使字符串相等,条件也会进入else
......现在你想的是因为字符串不相等。不,因为我得到了这个祝酒词:
什么?!那些是相同的字符串?!吐司甚至表明那些是相同的...如果他们都是“你好”,为什么比较不起作用?
谢谢,
Ruchir
答案 0 :(得分:1)
这太奇怪了。我只是比较两个字符串,它们是相同的,但它们不是..
你确定它们是相同的字符串???
尝试获取字节并比较它们(按字节)或使用代码点
try {
byte[] bytesStr1 = Str1.getBytes("UTF-8");
byte[] bytesStr2= Str2.getBytes("UTF-8");
if(bytesStr1.length!=bytesStr.length)log("no match = size");
for(int b=0;b<bytesStr1.length;b++) {
if(bytesStr1[b] != bytesStr2[b])
return log("no match at pos: "+ b);
}
} catch (UnsupportedEncodingException e) {
// handle exception here
}
字符串比较失败可能有很多原因 - 例如
简单的例子:
String oldString = "\uD800";
String newString = new String(oldString);
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8");
newString.equals(oldString) // ???? false
小小的吸引力:
你的大多数人(我的意思是大多数人在这里)问题可以通过阅读和理解基础知识来解决:) - 但你却从大“水”中“淹没”了
好的,我尝试了你所说的并逐字逐句,但它们都是一样的。此外,长度是相同的。 - Ruchir Baronia
所以这意味着“在您的定义中”两个字符串都等于
代替比较方法,您可以使用:
int pos = String.indexOf(String); //this will return you the firs position where the two strings don't match
https://docs.oracle.com/javase/tutorial/java/data/comparestrings.html
现在,当我们为android编写代码时,我建议特别注意 - 因为google会自行重写大多数java类,Oracle中的字符串类与Google String类不同,因为它们不会在ORACLE JVM上直奔! - 参观ART(Android Runtime) - 每当我访问google&amp;浏览回购我看到google api&amp; amp;中的代码更改android的源代码我看到更多的东西重写在纯c(作为本机) - 谷歌想打破专有的oracle java因此使用更多的开放jdk实现