【问题标题】:Comparing two strings in android [duplicate]比较android中的两个字符串[重复]
【发布时间】:2012-09-26 23:49:11
【问题描述】:

可能重复:
Comparing two identical strings with == returns false

我很难解决这个代码。这可能看起来很傻,但我无法弄清楚发生了什么。我正在解析 JSONArray(没什么大不了的!)我正在使用 for 循环遍历数组。我想在用户输入和值匹配时打破循环。这是我的代码

String regi = null;
JSONObject studentObject = null;
try {
JSONArray returned = test.getInternetData();
int i;
for (i = 0; i < returned.length(); i++) {
    studentObject = returned.getJSONObject(i);
    regi = studentObject.getString("REGISTRATION_NO");
    if (regi == reg) {
        name = studentObject.getString("STUDENT_NAME");
        break;
    }
}
course = studentObject.getString("COURSE_CODE");
Log.d("Details", name + course + regi + i);//Out put: nullGraduate081018394:name - null
//course: Graduate (same for all), regi: last registration number, 
//i: giving totalnumber of objects

据我所知,循环应该在找到匹配项时停止。 COURSE_CODE 将对应于学生。我错过了什么吗?

请注意:函数getInternetData() 正在返回整个JSON Array。循环完全遍历每个对象。

【问题讨论】:

  • 我不确定哪条线路引起了麻烦。我觉得我的情况有点不同
  • 您在日志中打印的名称是什么?它没有任何数据(从您所做的帖子来看,它是一个空变量)
  • @Sharath 我确定我没有比较空变量。您能指出哪个变量为空?
  • 它没有比较,只是尝试将这一行 Log.d("Details", name + course + regi + i) 更改为 Log.d("Details", name + " - "+course + " - "+ regi +" - "+ i) 并返回您在日志中获得的输出
  • 变化不大。我得到这样的东西:null-Graduate-081018394-18。我应该在哪里用我的名字代替 null,我的注册号和我的 slno。我从最后一个对象中获取所有详细信息,并且名称变为空。

标签: android json string


【解决方案1】:

字符串不能与 Java 中的 == 进行比较。你必须使用string1.equals(string2)。

【讨论】:

    【解决方案2】:

    使用regi.equals(reg) 或regi.contentEquals(reg) 而不是== 你会没事的:-)

    【讨论】:

      【解决方案3】:

      使用regi.contentEquals(reg) 或!regi.contentEquals(reg) 进行比较

      【讨论】:

        【解决方案4】:

        你应该使用regi.contentEquals(reg)

        【讨论】:

        • 字符串 hi = "hi";字符串你好=“嗨”; if(hi==hello){ //do something } 这行得通。
        • 这往往不是:char c = 'i'; String a = "hi"; String b = "h" + c; if (a == b) { //something }。 == 进行对象比较,而 equals() 进行 String 比较。通读我链接的实际答案。
        • OK 然后尝试 sysout 方式... System.out.println("regi: -" + regi + "- reg: -" + reg + "-");看看你能不能发现什么奇怪的东西:)
        • @DibyaPanda:Java 实习生字符串文字。因此,当您创建字符串文字String a = "..."; String b = "..." 时,它首先将字符串“...”添加到内部字符串表中,然后当您创建第二个字符串 b 时,它会查找“...”,在intered 字符串表,并且 b 将指向同一个字符串 a 。但是,当您不是从字面上声明字符串时,这并不总是有效。 == 检查两个原语是否具有相同的值,或者两个对象是否指向同一个底层对象。
        【解决方案5】:

        试试这个

        JSONArray returned = test.getInternetData();
        int i;
        for (i = 0; i < returned.length(); i++) {
        // added the below line
        studentObject = new JsonObject();
        studentObject = returned.getJSONObject(i);
        regi = studentObject.getString("REGISTRATION_NO");
        if (regi.equals(reg)) {
            name = studentObject.getString("STUDENT_NAME");
            break;
        }
        }
        

        而不仅仅是

        JSONArray returned = test.getInternetData();
        int i;
        for (i = 0; i < returned.length(); i++) {
        studentObject = returned.getJSONObject(i);
        regi = studentObject.getString("REGISTRATION_NO");
        if (regi == reg) {
            name = studentObject.getString("STUDENT_NAME");
            break;
        }
        }
        

        【讨论】:

        • 我认为你是对的,使用== 会导致问题。我认为你的代码应该更新。
        • 是的 是的 对不起
        猜你喜欢
        • 2012-06-19
        • 2013-04-15
        • 1970-01-01
        • 2013-06-24
        • 2012-11-23
        • 2011-10-12
        • 2020-03-23
        • 2017-11-19
        • 1970-01-01
        相关资源
        最近更新 更多