有没有正确排序这个数组的方法?

时间:2017-03-28 01:19:38

标签: java arrays sorting

所以我有一个包含文件信息的数组。该文件包含各个国家的人口。目标是从最高到最低排序。数据中包含逗号,禁用转换为int的选项。例如:" 10,979"," 2,313,973,713"," 134"这是我用来排序的方法:

    for(i=0;i<length;i++){
  for(j=1+i;j<length-1;j++){
    if(popList[i].compareTo(popList[j])>0)
    {
      temp2=popList[i];
      temp=countryList[i];
      popList[i]=popList[j];
      countryList[i]=countryList[j];
      popList[j]=temp2;
      countryList[j]=temp;
    }
  }    //
}

我最终输出:

    10,979
    134
    2,313,973,713

有没有办法将它与被比较的每个数字完全比较,并用逗号分类?

2 个答案:

答案 0 :(得分:1)

您可以从String替换逗号,然后再进行比较。

str = str.replaceAll(",", "");

答案 1 :(得分:0)

请参阅编辑以处理为int的版本(无法处理int.max)

因此,为了比较n个人口长度,并且考虑到输入可以被&#34;,&#34;分开。并且始终是String,这可以按预期对列表进行排序

public class Country implements Comparable<Country>{

    public static void main(String[] args){
        List<Country> countries = new ArrayList<>();
        countries.add(new Country("10,979"));
        countries.add(new Country("2,313,973,713"));
        countries.add(new Country("134"));
        countries.add(new Country("321"));
        countries.add(new Country("52,851"));
        countries.add(new Country("134"));

        Collections.sort(countries);

        for(Country country : countries)
            System.out.println(country.getPopulation());
    }

    private String population;

    public Country(String population){
        this.population = population;
    }

    public String getPopulation() {
        return population;
    }

    public void setPopulation(String population) {
        this.population = population;
    }

    @Override
    public int compareTo(Country o) { //will break unless input is numbers or "," seperated numbers
        String temp1 = population.replaceAll(",", "");
        String temp2 = o.population.replaceAll(",", "");

        if(temp1.length() > temp2.length())
            return 1;
        else if(temp2.length() > temp1.length())
            return -1;
        else
        {
            char[] pop1 = temp1.toCharArray();
            char[] pop2 = temp2.toCharArray();
            for(int i = 0; i < temp1.length(); i++){
                if(Integer.parseInt(String.valueOf(pop1[i])) > Integer.parseInt(String.valueOf(pop2[i])))
                    return 1;
                else if(Integer.parseInt(String.valueOf(pop1[i])) < Integer.parseInt(String.valueOf(pop2[i])))
                    return -1;
            }
            return 0;
        }
    }
}

请注意,此解决方案非常适用于此问题,并且包装器允许您保存有关某个国家/地区的各种其他数据,并根据多个内容进行排序,如果说人口相同,则可能要对名称或类似内容进行排序

输出

  

134

     

134

     

321

     

10979

     

52851

     

2313973713