等于子字符串值不会返回预期结果

时间:2012-02-13 16:21:07

标签: java android

嗨我对这个子字符串有一个问题,我希望它是相同的。好吧,我创建了一个函数,您将比较两个名称,然后只要这些名称共享相同的字符,它就会将所有字符更改为空格。你能检查一下这个错误在哪里吗?我很难搞清楚。这是我的代码:

name1 = name1.replace(" ","");
    name2 = name2.replace(" ","");

    Log.v(TAG, name1);
    Log.v(TAG, name2);

    Log.v(TAG, String.valueOf(name1.length()));
    Log.v(TAG, String.valueOf(name2.length()));

    for (int x=0; x < name1.length(); x++){
        for (int y=0; y < name2.length(); y++){

            Log.v(TAG, "Value of LOOP : "+"-"+String.valueOf(y) +"-"+String.valueOf(x)+"-");
            Log.v(TAG,"-"+name1.substring(x)+"-"+name2.substring(y)+"-");

            if (name1.substring(x) == name2.substring(y)){
                Log.v(TAG, "Value of XY : "+String.valueOf(y)+","+String.valueOf(y));

                name1 = name1.replace(name1.substring(x)," ");
                name2 = name2.replace(name2.substring(y)," ");
            }
        }
     }
    Log.v(TAG,"LOOP SUCCESS");

    String name3 = name1 + name2;
    Log.v(TAG,"Name 3 Value: "+name3);

4 个答案:

答案 0 :(得分:9)

请勿使用==来比较两个String变量。使用equals()方法。

if (name1.substring(x).equals(name2.substring(y))) {
    ...

答案 1 :(得分:3)

不要将Java字符串与==进行比较,而是使用equals()。基本上你有两个具有相同值的对象。运算符==测试两个引用是否指向同一个对象。

答案 2 :(得分:2)

java中的字符串/对象比较是.equals()而不是==

if (name1.substring(x).equals(name2.substring(y)))

答案 3 :(得分:1)

正如其他人所指出的,每当你想要比较两个String对象的实际数据时,你应该使用.equals()使用==只会比较双方是否是相同的对象(换句话说,如果它们是相同的记忆位置。)

以下是一些可以帮助您理解的代码

String s = "Hello";
String d = "Hello";

System.out.println(s.equals(d)); // Prints out true
System.out.println(s == d); // Prints out false

String newS = s;

System.out.println(s.equals(newS); // Prints out true, the data is still the same
System.out.println(s == newS); // Prints out true because they are the same object

.equalsIgnoreCase()的工作方式相同,但"Hello""hello"将被视为相等的字符串。

相关问题