web-dev-qa-db-fra.com

Comparaison de deux chaînes Java, caractère par caractère

Je suis débutant en Java, j'essaie de comparer deux chaînes en Java char par char et de trouver combien de caractères différents ils ont par le code suivant mais cela ne fonctionne pas

     min is the min between the 2 strings

     for(int i=0; i<min-1; i++){
            s1 = w1.substring(j,j++);
            s2 = w2.substring(j,j++);

            if (! s1.equalsIgnoreCase(s2) ){
                counter++;    
            }
      }`

Des conseils? 

8
mike

Utilisez ceci: 

char[] first  = w1.toLowerCase().toCharArray();
char[] second = w2.toLowerCase().toCharArray();

int minLength = Math.min(first.length, second.length);

for(int i = 0; i < minLength; i++)
{
        if (first[i] != second[i])
        {
            counter++;    
        }
}
10
Baz

Utilisez la méthode charAt (index) et utilisez l'opérateur '==' pour les deux caractères: 

c1 = w1.charAt(j);
c2 = w2.charAt(j);

if (c1 == c2) ){
   counter++;    
}
4
Razvan
int i =0;
for(char c : w1.toCharArray())){
   if(i < w2.length() && w2.charAt(i++) != c)
     counter++;
}
2
kgautron

Nous pouvons résoudre le problème avec substring. Mais regardons d'abord votre code:

// assuming, min is the minimum length of both strings,
// then you don't check the char at the last position
for(int j=0; j < min-1; j++) {

  // s1, s2 will always be empty strings, because j++ is post-increment:
  // it will be incremented *after* it has been evaluated
  s1 = w1.substring(j,j++);
  s2 = w2.substring(j,j++);

  if (!s1.equalsIgnoreCase(s2) ){
    counter++;    
  }
}

Une solution basée sur substring pourrait être la suivante:

for(int j=0; j < min; j++) {
  s1 = w1.substring(j,j+1);
  s2 = w2.substring(j,j+1);

  if (!s1.equalsIgnoreCase(s2) ){
    counter++;    
  }
}
1
Andreas_D

Mes notes d'un tutoriel de formation Java nécessitant une comparaison de chaînes avec charAt () et des boucles imbriquées ... La méthode peut facilement être modifiée pour renvoyer les caractères non correspondants de la chaîne source ... ... ;-)

public class SubString {

public static boolean findTarget( String target, String source ) {

    int target_len = target.length();
    int source_len = source.length();

    boolean found = false;

    for(int i = 0; ( i < source_len && !found ); ++i) {

    int j = 0;

        while( !found ) {

            if( j >= target_len ) {
                break;
            }

            /**
             * Learning Concept:
             *
             *  String target = "for";
             *  String source = "Searching for a string within a string the hard way.";
             *
             *  1 - target.charAt( j ) :
             *    The character at position 0 > The first character in 'Target' > character 'f', index 0.
             *
             *  2 - source.charAt( i + j) :
             *
             *    The source strings' array index is searched to determine if a match is found for the
             *    target strings' character index position. The position for each character in the target string
             *    is then compared to the position of the character in the source string.
             *
             *    If the condition is true, the target loop continues for the length of the target string.
             *
             *    If all of the source strings' character array element position matches the target strings' character array element position
             *    Then the condition succeeds ..
             */

            else if( target.charAt( j ) != source.charAt( i + j ) ) {
                break;
            } else {
                ++j;
                if( j == target_len ) {
                    found = true;
                }
            }
        }

    }

    return found;

}

public static void main ( String ... args ) {

String target = "for";
String source = "Searching for a string within a string the hard way.";

System.out.println( findTarget(target, source) );

}

}
0
Eddie B