所以我有一个包含文件信息的数组。该文件包含各个国家的人口。目标是从最高到最低排序。数据中包含逗号,禁用转换为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
有没有办法将它与被比较的每个数字完全比较,并用逗号分类?
答案 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