java - 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中进行检查?
谢谢!
解决方案
顺便说一句,这些字符串是实际数据(json),它们真的很大,我想测试它的相等性(内容)。
如果这些是 JSON 数据,请不要将它们与 String 进行比较。
使用 JSON 库(Jackson、GSON 或任何东西)来表示这些数据并比较它们(equals()
通常被覆盖)。它会通过考虑或忽略空格、节点顺序等内容来更清晰、更具体地比较它们。 . 你可以在这里找到一些例子。
您可以更特别地考虑 SkyScreamer 库,它提供多种风格来比较 JSON。例如这个JSONAssert.assertEquals()
重载:
public static void assertEquals(org.json.JSONArray expected,
org.json.JSONArray actual,
JSONCompareMode compareMode)
throws org.json.JSONException
您可以在其中指定一个JSONCompareMode
对象,例如 JSONCompareMode.LENIENT
.
推荐阅读
- python - 查询在 phpmyadmin 上执行,但不在 python 脚本中
- node.js - 使用 nodejs 录制 .wav 会导致 .wav 文件被拉伸
- python - keras 预测类方法
- c# - 如何将数据库中的项目添加到清单框?
- c++ - 如何将此代码转换为适用于两个以上的数字(计算 HCF)
- c# - 从另一个文件 C# 调用方法
- .net - 我可以从 .net 2.1 降级到 2.0 以进行单元测试吗
- matlab - 如何从 Matlab 中的现有数据集创建颜色图?
- c# - 从 OnTriggerEnter 类获取变量到另一个类
- java - '[io.rearealm.com_example_myapplication_UserRealmProxy]' 类型的未关闭文件;这些类型不会进行注释处理