Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用RuleBasedCalator设置排序规则面临困难_Java_Sorting_Selenium Webdriver - Fatal编程技术网

在java中使用RuleBasedCalator设置排序规则面临困难

在java中使用RuleBasedCalator设置排序规则面临困难,java,sorting,selenium-webdriver,Java,Sorting,Selenium Webdriver,我正在进行自动化,尝试执行以下操作: 正在从已处于升序状态的网页获取字符串值列表 我想确定网页给定的值升序是否正确 所以我将值存储在我从web页面收集的数组中 在从web页面收集值之后,我正在对该数组进行排序,但在使用java代码进行排序之后,我并没有看到相同的值以升序排列 这些是我从网站升迁后得到的值: _john _tim 11 111 5 A aaa aaa AI-1 Android API AppName asd AWS AWS awstest AWSTest1type Azure 使

我正在进行自动化,尝试执行以下操作:

正在从已处于升序状态的网页获取字符串值列表

我想确定网页给定的值升序是否正确

所以我将值存储在我从web页面收集的数组中

在从web页面收集值之后,我正在对该数组进行排序,但在使用java代码进行排序之后,我并没有看到相同的值以升序排列

这些是我从网站升迁后得到的值:

_john
_tim
11
111
5
A
aaa
aaa
AI-1
Android
API
AppName
asd
AWS
AWS
awstest
AWSTest1type
Azure
使用java collection进行排序后,我得到如下结果:

 _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));

以上规则中有什么遗漏吗?

这是由于ASCII字符集的顺序,其中“Z”比“a”先出现

RuleBasedCalator只检查要排序的字符串的第一个字母。因为你制定的规则是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);
    }

您能详细解释一下吗?谢谢您的回答,您指定的规则只适用于特殊字符?是否需要为字母数字添加单独的规则?数字/字母数字字符串将在Collections.sortstrList,String.CASE\u INSENSITIVE\u ORDER;下进行排序;。嘿,它很有魅力。非常感谢你,我的朋友。对我来说,理解逻辑也是必要的。你能告诉我这条规则规定了什么吗?