2015-01-25 2 views
0

Я должен проверить, правильно ли отсортирован столбец данных в html. Я копирую его в список Java, создаю копию, которую сортирую, и сравниваю. К сожалению, Java сортируется иначе, чем программа, которая создала таблицу (что также похоже на сортировку Excel). Итак, я написал компаратора и задавался вопросом о комментариях? Также я задавался вопросом, существует ли уже класс, который существует там, где вы даете ему строку символов восходящих символов, и она сортируется? Collator может это сделать, но я попытался написать его и никогда не получил его на работу. Вот мой компаратор:Другая сортировка по Java, которую я пытаюсь решить

static class xcomp implements Comparator { 
    String cst = "'-–— !\"#$%&()*,./:;[email protected][\\]^ˆ_`{|}~¡¦¨¯´¸¿˜‘’‚“”„‹›+<=>±«»×÷AaªÁáÀàÂâÄäÃãÅåÆæBbCcÇçDdÐðEeÉéÈèÊêËëFfƒGgHhIiÍíÌìÎîÏïJjKklMmNnÑñoºÓóÒòÔôÖöÕõØøŒœPpQqRrSŠšßTtÞþ™UuÚúÙùÛûÜüVvWwXxYyÝýŸÿZzŽž"; 

    public void xcomp(String sort) { 
     cst = sort; 
    } 

    @Override 
    public int compare(Object o1, Object o2) { 

     if (o1 == null && o2 == null) { 
      return 0; 
     } 

     if (o1 == null) { 
      return -1; 
     } 

     if (o2 == null) { 
      return 1; 
     } 

     String s1 = (String) o1; 
     String s2 = (String) o2; 

     int l1 = s1.length(); 
     int l2 = s2.length(); 

     if (s1.equals(s2)) { 
      return 0; 
     } 

     int l = Math.min(l1, l2); 
     for (int i = 0; i < l; i++) { 
      char c1 = s1.charAt(i); 
      char c2 = s2.charAt(i); 
      int p1 = cst.indexOf(c1); 
      int p2 = cst.indexOf(c2); 

      if (p1 == -1 || p2 == -1) { 
       p1 = (int) c1; 
       p2 = (int) c2; 
      } 

      if (p1 != p2) { 
       return (int) (p1 - p2); 
      } 
     } 

     // Strings are the same so far 
     return (l1 - l2); 
    } 
+0

Возврат является одним из символов в строке, поэтому он отключил форматирование кода для этого короткого сегмента. Извини за это. – user3257891

+0

Как этот вопрос связан с 'selenium'? – Saifur

ответ

0

Вот ошибка в компараторе.

if (p1 == -1 || p2 == -1) { 
     p1 = (int) c1; 
     p2 = (int) c2; 
    } 

Если p1 или p2 минус один, что означает, что символ не в вашей последовательности сбора. Вам нужно либо выручить (выбросить исключение), либо рассматривать его последовательно как «до» или «после» известных символов. Это не то, что вы делаете.

+0

Да, я не был уверен, что делать. На самом деле это означает, что есть персонаж, которого я забыл вставить в строку сортировки. В этом случае я просто полагался на сортировку по умолчанию, но то, что я действительно должен сделать, это отметить ее и выяснить, в какой строке она должна идти. – user3257891

+0

* «Я просто полагался на сортировку по умолчанию в этом случае ...» * - Ну, это не то, что вы реализовали. Внимательно прочитайте свой код. То, что на самом деле делает ваш код, это неверно истолковать неизвестный символ как индекс в последовательности сортировки! –

+0

Я действительно удалил это целое, если. Если символ отсутствует, его значение будет равно -1 и будет сортироваться перед любым другим символом, начинающимся с 0 (или это 1)? – user3257891

Смежные вопросы