Java很长的字符串比较似乎不起作用

更新:

使用您在检查字符串之间的建议,我发现不同之处在于某些字段的排列,因为这些字符串实际上是 JSON 字符串。


示例: string1 上

的字段username: johndoe@dummy.com位于开头,但位于 string2 的中间某处。我想知道是否有一种方法可以检查或比较 2 个 json 对象,而不管它们的字段/属性的排列如何……只要它们的内容(字段值)相同。


我尝试了什么:


private boolean sameJsonObject(Object o1, Object o2) throws IOException {

    if (o1 == null || o2 == null) {

        return false;

    }


    JsonNode json1 = mapper.readTree(mapper.writeValueAsString(o1));

    JsonNode json2 = mapper.readTree(mapper.writeValueAsString(o2));


    return json1.equals(json2);

}

这行得通,但我相信这可以改进。


原始问题:

我想检查两个字符串是否相等,但是这些字符串真的很长,不能设置为变量/字符串对象,并且字符串常量太长。


我知道有equals(), equalsIgnoreCase(),StringUtils.equals(s1, s2)但这些似乎都不起作用。


我正在比较的字符串来自两个不同的来源,并且手动比较它会得到相同的结果(我的意思是内容相同)。


我试图在这里发布示例字符串,但我不能。要比较的每个字符串的大小超过 30k(每个字符串 170k)。


顺便说一句,这些字符串是实际数据(json),它们真的很大,我想测试它的相等性(内容)。


有没有办法在java中进行检查?


紫衣仙女
浏览 161回答 3
3回答

桃花长相依

简单的答案是:逐个字符比较两个字符串。换句话说:很可能,内置的 Java 字符串比较方法是正确的,导致:您的输入字符串不相等。相等的字符串极不可能导致equals()给出错误。因此,合理的第一个选择是:更改您的比较代码,使其:逐个字符地迭代第一个字符串从第二个字符串中获取对应的字符比较那些(“完整”等于或忽略大小写)关于不匹配:打印出索引和两个不同的字符(您确保打印一些东西,例如"<" + thatChar + ">"只是为了确保不可打印的字符,或者可能使用 Character.getNumericValue())所以,这里的答案基本上是让自己能够进行适当的调试。

拉莫斯之舞

顺便说一句,这些字符串是实际数据(json),它们真的很大,我想测试它的相等性(内容)。如果这些是 JSON 数据,请不要将它们与 String 进行比较。使用 JSON 库(Jackson、GSON 或任何东西)来表示这些数据并比较它们(equals()通常被覆盖)。它会通过考虑或忽略空格、节点顺序等内容来更清晰、更具体地比较它们。 . 你可以在这里找到一些例子。您可以更特别地考虑 SkyScreamer 库,它提供多种风格来比较 JSON。例如这个JSONAssert.assertEquals()重载:public static void assertEquals(org.json.JSONArray expected,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; org.json.JSONArray actual,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; JSONCompareMode compareMode)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throws org.json.JSONException您可以在其中指定一个JSONCompareMode对象,例如 JSONCompareMode.LENIENT.

红颜莎娜

170k 对于字符串来说并不算大,尽管对于源代码中的字符串文字来说它很大。从包含它们的文件中加载您的两个字符串,并使用 equals 以正常方式进行比较。您提到字符串不是文本而是 JSON。在大多数情况下,您需要规范化您的 json(使空格、属性顺序和标点符号相同)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java