【问题标题】:String.equal() returning false when it should return trueString.equal() 在应该返回 true 时返回 false
【发布时间】:2018-09-07 19:15:04
【问题描述】:

我从服务器获取 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 进行比较,因此返回 false?

提前致谢!

【问题讨论】:

  • 您的字符串似乎有引号。试试t.equals("\"F02660934\"")
  • 这很有效,谢谢@killjoy 你能把它作为答案发布,这样你就可以获得声望分

标签: java string gson


【解决方案1】:

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

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

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

更多信息见GSON JsonElement.getAsString vs. JsonElement.toString?

【讨论】:

    【解决方案2】:

    @killjoy 在 cmets 中推荐了这个,但 Java 将 "F02660934"F02660934 进行比较,将引号作为字符串的一部分读取。如果使用toString(),这可以通过以下两种方式之一解决:

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多