Столкнувшись с трудностями при настройке правил сортировки с использованием RuleBasedCollator в Java - PullRequest
0 голосов
/ 19 января 2019

Я делаю автоматизацию, где пытаюсь выполнить ниже:

  1. Получение списка строковых значений с веб-страницы, которая уже находится в порядке возрастания.

  2. Я хочу убедиться, что если на веб-странице заданы правильные значения в порядке возрастания или нет.

  3. Поэтому я храню значения в массиве, который я собрал с веб-страницы.

  4. После сбора значений с веб-страницы я сортирую этот массив, но кое-как не вижу те же значения в порядке возрастания после сортировки с использованием кода Java.

Это значения, которые я получаю после поднятия с веб-сайта:

_john
_tim
11
111
5
A
aaa
aaa
AI-1
Android
API
AppName
asd
AWS
AWS
awstest
AWSTest1type
Azure

И после сортировки с использованием коллекции java я получаю следующее:

 _john
    _tim
    11
    111
    5
    A
   AI-1
   API
   AWS
   AWS
  Android
  AppName
  Azure
  aaa
  aaa

Код, который я использую для сортировки:

String rules = "< '_' < 1 < 2 <3 <4 < 5 < A < a";
        Collections.sort(myStringArray, new RuleBasedCollator(rules));

Могу ли я что-то пропустить в вышеуказанных правилах?

1 Ответ

0 голосов
/ 19 января 2019

Это связано с порядком набора символов ASCII, где 'Z' стоит первым, чем 'a'


RuleBasedCollator проверяет только первую букву строки для сортировки.Как правило, установлено вами (A

Поскольку ваш список содержит строки, начинающиеся со специальных символов, я предлагаю создать два списка для сортировки.Один для строки, начинающейся со специальных символов, а затем другой список, содержащий все другие значения.Сортируйте эти два списка по отдельности, а затем объединяйте отсортированные списки.Я попробовал приведенный ниже код, и он отлично работает

// Input list
List<String> name = new ArrayList<String>();


    final String[] specialChars = { "_", ">" }; 
    List<String> specCharList = new ArrayList<String>();
    List<String> strList = new ArrayList<String>();
    List<String> finalList = new ArrayList<String>();
    String rules = "< '_' < '>' ";

    boolean isSpec = false ;
    for(String names : name) {
        isSpec = false ;
        for(int i=0;i<specialChars.length;i++) {
            if(names.startsWith(specialChars[i])) {
                // System.out.println("Name : "+names);
                isSpec = true ;
            }
        }  
      // to sort special char list and normal list
       if(isSpec) {
           specCharList.add(names);
       } else {
           strList.add(names);
       }
    }


    try {
        // To sort special character list
        Collections.sort(specCharList, new RuleBasedCollator(rules));
        // Add the sorted list to finallist
        finalList.addAll(specCharList);

        // to sort other list
        Collections.sort(strList, String.CASE_INSENSITIVE_ORDER);
        // Add the sorted list to finallist
        finalList.addAll(strList);

    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    System.out.println("Final Output List --------");
    for(String names : finalList) {
        System.out.println(names);
    }

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