Мне нужно сравнить две строки и выяснить, похожи они или нет, и сколько. Например, у меня есть String "5000002105416"
и по сравнению с "5000003205416"
он должен дать мне результат 0.85
, так как есть только 2
символы, которые не совпадают в обеих строках, которые содержат 13
символов. Причина в том, что я использую Zbar для сканирования штрих-кодов, и иногда это дает мне немного неправильный результат, и мне нужно проверить, похож ли этот результат на некоторые жестко закодированные теги, которые мне нужно сопоставить.Как проверить сходство строк
ответ
Пусть Предположим, ваши String
s имеют одинаковую длину, так что вам нужна функция, которая перебирать их обоих, сравнивая каждый 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();
}
Не проще ли подсчитать сходство вместо различий? Теперь вы выполняете дополнительную операцию. '(1 - dif)' –
Также это также возвращает 1 или 0, потому что вы не бросаете ints в парные –
@nickzoum, обновили мой ответ. ':)' –
Вы можете легко иметь метод, как:
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
.
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. Как проверить частичное сходство двух строк в C#
- 2. Как проверить частичное сходство двух строк в PHP
- 3. Как рассчитать строковое сходство строк?
- 4. Первого письма Проверить Сходство
- 5. Процентное сходство между набором строк
- 6. Как проверить сходство между двумя ints java
- 7. Как измерить сходство строк между предложениями?
- 8. Проверить сходство двух текстов по слову?
- 9. Каков наилучший способ сравнить сходство двух строк?
- 10. Как сравнить две строки и определить сходство обеих строк?
- 11. Чтобы проверить сходство между текстовыми данными
- 12. Проверить сходство на изображениях различного размера
- 13. Проверить сходство между двумя строковыми выражениями Swift
- 14. Сравнивая сходство двух строк в Python
- 15. сходство
- 16. многоколоночный индекс для совпадения строк + сходство строк с pg_trgm?
- 17. Как найти сходство в текстах
- 18. Как эффективно вычислить сходство косинусов между миллионами строк
- 19. Как измерить сходство 2 строк в сторону от вычислительной дистанции
- 20. Строковое сходство в c
- 21. Как проверить длины строк?
- 22. Как вычислить сходство файлов
- 23. Как найти сходство предложения?
- 24. Экстраполированное сходство Сходство с учетом слов сходства
- 25. Сходство между документами (сходство с косинусом)
- 26. Косинус сходство
- 27. перечисляет сходство
- 28. Scala String сходство
- 29. Косинус сходство в Java
- 30. Сходство документа
Будут ли они всегда будет такая же длина? – MrB
Похоже, что ваши строки всегда имеют одинаковую длину, поэтому вам нужно только подсчитать разные символы. Простой цикл выполнит эту работу. – talex
Я обновил свой ответ на некоторые исправления ошибок, надеюсь, что это поможет. ':)' –