为了账号安全,请及时绑定邮箱和手机立即绑定

在 java 中使用 RuleBasedCollat​​or 设置排序规则面临困难

在 java 中使用 RuleBasedCollat​​or 设置排序规则面临困难

陪伴而非守候 2022-05-12 17:32:00
我正在尝试执行以下自动化操作:从已经升序的网页中获取字符串值列表。我想确保网页给定的值升序是否正确。所以我将值存储在从网页收集的数组中。从网页收集值后,我对该数组进行排序,但是在使用 java 代码排序后,我看不到相同的值以升序排列。这些是我从网站上升后得到的值:_john_tim111115AaaaaaaAI-1AndroidAPIAppNameasdAWSAWSawstestAWSTest1typeAzure在使用 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 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

这是由于 ASCII 字符集的顺序,其中 'Z' 先于 'a'


RuleBasedCollator 仅检查要排序的字符串的第一个字母。正如您设定的规则是(A < 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);

    }


查看完整回答
反对 回复 2022-05-12
  • 1 回答
  • 0 关注
  • 212 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号