2016-10-15 10 views
-1

2つの文字列を比較し、それらが似ているかどうか、そしてどれくらいあるかを調べる必要があります。たとえば、私は文字列"5000002105416"を持っていて、"5000003205416"と比較すると、結果として0.85が得られるはずです。シンボルを含む両方の文字列で一致しない2シンボルだけが存在するためです。なぜなら、Zbarをバーコードスキャニングに使用しているのですが、時には誤った結果が出ることがあります。この結果が、一致する必要のあるハードコードされたタグと似ているかどうかを確認する必要があります。文字列の類似性をチェックする方法

+0

彼らは常になります同じ長さ? – MrB

+0

あなたの文字列は常に同じ長さを持つように見えるので、異なるシンボルを数えるだけです。単純なループがその仕事をします。 – talex

+0

私はいくつかのバグ修正のために私の答えを更新しました。 ':)' –

答えて

3

、あなたはそれらの両方を反復処理機能を必要とするので、あなたの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(); 
} 
+0

違いの代わりに類似点を数えるのが簡単ではないでしょうか?今あなたは余分な操作をしています。 '(1-dif)' –

+0

また、intをdouble型にキャストしていないので、これも1または0を返します。 –

+0

@nickzoum、私の答えを更新しました。 ':)' –

0

あなたは簡単のようなメソッドを持つことができます:あなたはnullまたは空の文字列を挿入する場合は、あなたは以下のように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); 
} 

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); 
関連する問題