我正在从服务器获取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进行比较,因此返回假?
谢谢!
答案 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