Проверка равенства двух строк в Java - PullRequest
0 голосов
/ 25 марта 2012

Как проверить равенство двух String объектов независимо от порядка символов?

Примеры:

checkEq(A*B'*C,B'*A*C) has to return true
checkEq(A*B'*C,A*B*C) ----> false... etc

Ответы [ 3 ]

5 голосов
/ 25 марта 2012

Сортировка строки по символу и сравнение:

    char[] a1 = s1.toCharArray();
    Arrays.sort(a1);
    char[] a2 = s2.toCharArray();
    Arrays.sort(a2);
    return Arrays.equals(a1,a2);
1 голос
/ 25 марта 2012

Попробуйте использовать метод java str.split. Например, str.split("*") даст вам массив элементов A, B, C или B, A, C. А затем просто сортируйте их и один раз проходите через них один раз, чтобы сравнить.

String str1 = "A*B*C";
String str2 = "C*A*B";

// split strings into arrays
String[] array1 = str1.split("*");
String[] array2 = str2.split("*");

// sort each array
Arrays.sort(array1);
Arrays.sort(array2);

// compare arrays
for( i=0; i<array1.length; i++ ){
   if(array1[i] == array2[i]){
       return false;   // OR, do whatever it is you want to do here.
   }
}
0 голосов
/ 25 марта 2012

Вы можете поместить отдельные символы в Set<Character> или Map<Character, Integer> (используйте последний, если вам нужны кратные числа одного и того же символа). Затем вычисление различий набора в обе стороны скажет вам, есть ли символы в одной строке, которые не появляются в другой (таким образом, они не равны). Для карты вычислите разность множеств (как выше) для набора ключей, а затем, если они равны, разность каждого соответствующего значения - если все равны 0, две строки равны в смысле равенства вопроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...