String.equal()在应返回true时返回false

时间:2018-09-07 19:15:04

标签: java string gson

我正在从服务器获取JSON,然后使用GSON解析JSON。我想确定JSON中的字符串元素是否等于另一个字符串变量。但是,当String.equals()应该返回true时,它会返回false。

Java代码:

JsonElement element = parser.parse(response.toString());

    if (element.isJsonObject()) {
        JsonObject data = element.getAsJsonObject();
        JsonArray stud = data.get("students").getAsJsonArray();
        for(int i = 0; i < stud.size(); i ++){
            String t = stud.get(i).getAsJsonObject().get("StudNum").toString();
            System.out.println("t = " + t);
            if (t.equals("F02660934")){
                System.out.println("equal"); //never prints
            }
        }
    }

控制台输出:

t = "F02660934"
t = "002660934"
t = "002643472"
t = "002664906"

是否将“ F02660934”与F02660934进行比较,因此返回假?

谢谢!

2 个答案:

答案 0 :(得分:2)

您的字符串包含引号,因此您需要在if语句中包含引号。

if (t.equals("\"F02660934\""))
    System.out.println("equals");

尽管您不应该在toString()上使用JsonElement。请改用getAsString()

有关更多信息,请参见GSON JsonElement.getAsString vs. JsonElement.toString?

答案 1 :(得分:0)

@killjoy在评论中建议这样做,但是Java将"F02660934"F02660934进行了比较,并读取了引号作为字符串的一部分。如果使用toString(),可以通过以下两种方法之一解决此问题:

1)。 t.equals("\"F02660934\"")导致t忽略equals()中的引号

2)。 t = t.replaceAll("\"", "")会从字符串中去除引号并将其替换为空,因此在调用equals()t等效于F02660934

相关问题