我需要比较两个字符串,并找出它们是否相似,以及多少。例如,我有一个字符串"5000002105416"
,并与"5000003205416"
比较,它应该给我结果0.85
,因为只有2
符号在包含13
符号的两个字符串中不匹配。原因是我使用Zbar进行条形码扫描,有时它会给我一些错误的结果,我需要检查这个结果是否与我需要匹配的一些硬编码标签类似。如何检查字符串的相似性
-1
A
回答
3
我们假设你String
■找相同的长度,所以你需要通过他们两人的迭代函数,比较每个char
,找到差异的数目:
double similarity(String a, String b) {
if(a.length() == 0) return 1;
int numberOfSimilarities = 0;
for(int i = 0; i < a.length(); ++i) {
if(a.charAt(i) == b.charAt(i)) {
++numberOfSimilarities;
}
}
return (double) numberOfSimilarities/a.length();
}
+0
计算相似性而不是更简单吗?你正在做一个额外的操作。 '(1 - dif)' –
+0
此外,这也要么返回1或0,因为你不是铸造整齐双打 –
+0
@nickzoum,更新了我的答案。 ':)' –
0
你可以很容易有这样的方法:
public static double compare(String string, String compareString){
int length = string.length();
int comLength = compareString.length();
int max = length;
int min = comLength;
int result = 0;
if (length < comLength){
max = comLength;
min = length;
}
for(int index = 0; index < min; index++){
if(string.charAt(index) == compareString.charAt(index)){
result++;
}
}
return (double)(result)/ (double)(max);
}
如果插入null
或空字符串这将引发一些错误,所以如果你不希望出现这种情况,那么你可以添加一些检查,像返回0 :
if(string.isEmpty()){
if(compareString.isEmpty()){
return 1;
}
return 0;
}else if(compareString.isEmpty()){
return 0;
}
或类似的东西。你也可以使用类似的逻辑来防止nulls
。
0
String a, b;
int count = 0;
for(int i = 0; i<13; i++){
if(a.charAt(i)==b.charAt(i)) count++;
}
System.out.println(count/13.0);
相关问题
- 1. 如何在php中检查两个字符串的相似性?
- 2. 检测字符串中的相似性
- 3. 检查相似性
- 4. StringBuilder和字符串相等性检查
- 5. Python中的字符串相似性
- 6. 识别字符串中的相似性
- 7. 检测字符串的相似性(缓慢)
- 8. 如何查找两个字符串中的相似字数?
- 9. 按相似性分组字符串
- 10. Python字符串比较相似性
- 11. 字符串相似性 - > Levenshtein距离
- 12. 查找SYBASE中的字符串之间的相似性SQL
- 13. 如何检查字符的字符串?
- 14. 如何确定字符相似性?
- 15. 检查一个字符串是否与另一个字符串相似
- 16. 如何找到字符串相似度?
- 17. 如何衡量字符串之间的相似性?
- 18. 如何计算两个字符串之间的相似性MYSQL
- 19. 查找二进制字符串中的相似性
- 20. 如何检查PHP中两个字符串的部分相似度
- 21. 如何检查字符串
- 22. 如何使用SequenceMatcher查找两个字符串之间的相似性?
- 23. python字符串和C字符数组之间的相似性
- 24. 如何根据SQL中的字符相似性比较字符串?
- 25. Scala字符串相似度
- 26. 字符串相似算法
- 27. 如何使用递归检查2个字符串是否相似?
- 28. 如何比较2个具有相似字符的字符串?
- 29. 字符串比较算法,相关性,多少“相似”2个字符串
- 30. 使用JAVA中的字符串检查ENUM值的相等性
他们会永远是同样的长度? – MrB
它看起来像你的字符串总是有相同的长度,所以你只需要计算不同的符号。简单的循环将完成这项工作。 – talex
我更新了一些错误修复的答案,希望它有所帮助。 ':)' –