Java:将大字符串转换为较小固定长度字符串的简单方法
我正在处理一个需要比较JSON对象内容的问题,我必须对许多记录重复这样做。我不能进行苹果对苹果的比较,因为我必须跳过几个字段进行比较,而且数组中的数据可能有不同的顺序 对于Ex,以下JSON被认为具有相同的内容,即使它们具有相同的内容Java:将大字符串转换为较小固定长度字符串的简单方法,java,string,oracle,Java,String,Oracle,我正在处理一个需要比较JSON对象内容的问题,我必须对许多记录重复这样做。我不能进行苹果对苹果的比较,因为我必须跳过几个字段进行比较,而且数组中的数据可能有不同的顺序 对于Ex,以下JSON被认为具有相同的内容,即使它们具有相同的内容 不同的“id”值 “利益”中不同的价值顺序 数组 Json1: { "id":1, "name":"John", "dept":"HR", "interests":["Reading","Cycling"] } { "id":5, "name":"John"
- 不同的“id”值李>
- “利益”中不同的价值顺序 数组
{
"id":1,
"name":"John",
"dept":"HR",
"interests":["Reading","Cycling"]
}
{
"id":5,
"name":"John",
"dept":"HR",
"interests":["Cycling","Reading"]
}
Json2:
{
"id":1,
"name":"John",
"dept":"HR",
"interests":["Reading","Cycling"]
}
{
"id":5,
"name":"John",
"dept":"HR",
"interests":["Cycling","Reading"]
}
我们的计划是创建一个表,并将比较逻辑移植到数据库查询。这些数据稍后将用于执行其他一些操作
- id编号(10)
- nameVARCHAR(256)
- deptVARCHAR(256)
- 兴趣VARCHAR(256)
- 是否需要为字段编制索引(以便基于此执行
选择
)
- 是否需要比较字符串是否相等?如果是,假阳性是否可以接受
(id,interest)
元组的表和另一个包含(data id,interest id)
引用的表将确保不会丢失信息
截断字符串
例如,18个字符:
The quick brown fox jumps over the lazy dog -> The quick brown fo
The quick brown fox jumps over the fence -> The quick brown fo
当结果长度小于输入字符串时,截断将导致信息丢失。这可能是问题,也可能不是问题。根据输入字符串的不同,可以从输入的任意一端(实际上是任何地方)进行截断
散列字符串
例如:
同样,这会导致信息丢失:
敏捷的棕色狐狸跳过懒狗eJwLyUhVKCzNTM5WSCrKL89TSMuvUMgqzS0oVsgvSy1SKAFK5yRWVSqk5KcDAFvcD9o=
敏捷的棕色狐狸跳过篱笆eJwLyUhVKCzNTM5WSCrKL89TSMuvUMgqzS0oVsgvSy1SKAFKp6XmJacCAC1yDsE=
压缩字符串使您有机会将字符串解压缩回其原始形式。缺点是输出长度是可变的和未知的,并且某些类型的输入比其他类型的输入更适合压缩
总之,从您的问题和评论中可以看出,只有“适当的”关系方式似乎是正确的,但哈希可能是可行的。到目前为止您尝试了什么?您好,欢迎使用SO。现在还不完全清楚你想在这里实现什么。您希望将字符串存储为固定长度。如果您愿意牺牲信息,您可以简单地截断文本(即按所需长度剪切文本)或计算散列。如果没有,您可能能够在某种程度上压缩字符串,但此解决方案将无法处理无限的字符串。那么,问题是什么,您已经尝试了什么?当然,您可以尝试删除字符串,但它(1)对性能的影响可能比CLOB更大,(2)对随机格式的字符串的影响不大。“正确”的方法是将每个“兴趣”单独存储在链接表中。或者,您可以对兴趣列表中的值进行排序,以便始终存储“循环阅读”。兴趣“[“循环”]”或“[“循环”、“阅读”、“风筝”]”是否适合您?