我有一个应用程序将一些文本文件转换为其他测试和csv文件(对于每3个文本文件,我生成一个文本文件和一个类似的csv文件)。它是根据compareTo
方法命令一些阵营,文本文件和cvs文件之间的区别是我在文本文件中的区别,例如27个阵营和csv文件中只有25个,但其他信息是同样,我所看到的两个人也有一些顺序。
例如,我在原始文本文件中有:姓名,姓名,电话号码,邮政编码和一些识别。
在应用程序返回的文本文件中,我有:名称,姓氏,邮政编码和标识号。
在我拥有的csv文件中:姓名,邮政编码和身份证号码。
问题是我必须使用下一个代码重新排序邮政编码:
public int compareTo(Comunicado otro) {
int cod1=Integer.parseInt(this.codigoPostal);
int cod2=Integer.parseInt(otro.codigoPostal);
if(this.codigoPostal.startsWith("28") && otro.codigoPostal.startsWith("28")==false)
cod1=0;
else if(this.codigoPostal.startsWith("08") && otro.codigoPostal.startsWith("08")==false)
cod1=1;
if(otro.codigoPostal.startsWith("28") && this.codigoPostal.startsWith("28")==false)
cod2=0;
else if(otro.codigoPostal.startsWith("08") && this.codigoPostal.startsWith("08")==false)
cod2=1;
if(this.codigoPostal.equalsIgnoreCase("00000")){
cod1=2;
}
if(otro.codigoPostal.equalsIgnoreCase("00000")){
cod2=2;
}
return cod1-cod2;
}
我返回的两个文件是否有可能有不同的顺序?
我已经更改了我的代码,添加了下一行:
public int compareTo(Comunicado otro) {
int cod1=Integer.parseInt(this.codigoPostal);
int cod2=Integer.parseInt(otro.codigoPostal);
if(this.codigoPostal.startsWith("28") && otro.codigoPostal.startsWith("28")==false)
cod1=0;
else if(this.codigoPostal.startsWith("08") && otro.codigoPostal.startsWith("08")==false)
cod1=1;
if(otro.codigoPostal.startsWith("28") && this.codigoPostal.startsWith("28")==false)
cod2=0;
else if(otro.codigoPostal.startsWith("08") && this.codigoPostal.startsWith("08")==false)
cod2=1;
if(this.codigoPostal.equals(otro.codigoPostal))
{
if(this.codicoCliente.compareToIgnoreCase(otro.codicoCliente) == 0)
{
return this.codicoCliente.compareToIgnoreCase(otro.codicoCliente);
}
}
if(this.codigoPostal.equalsIgnoreCase("00000")){
cod1=2;
}
if(otro.codigoPostal.equalsIgnoreCase("00000")){
cod2=2;
}
return cod1-cod2;
}
这足以确定没有问题吗?
最后我用下一个代码解决了我的问题:
if(this.codigoPostal.startsWith("28") && otro.codigoPostal.startsWith("28")==false)
cod1=0;
else if(this.codigoPostal.startsWith("08") && otro.codigoPostal.startsWith("08")==false)
cod1=1;
if(otro.codigoPostal.startsWith("28") && this.codigoPostal.startsWith("28")==false)
cod2=0;
else if(otro.codigoPostal.startsWith("08") && this.codigoPostal.startsWith("08")==false)
cod2=1;
if(this.codigoPostal.equalsIgnoreCase("00000")){
cod1=2;
}
if(otro.codigoPostal.equalsIgnoreCase("00000")){
cod2=2;
}
if(this.codigoPostal.equals(otro.codigoPostal))
{
int i = this.codicoCliente.compareTo(otro.codicoCliente);
if (i != 0) return i;
}
return cod1-cod2;
}
答案 0 :(得分:0)
有一件事(除非我误解了你的代码) - 如果两个邮政编码以相同的两位数字开头,那么你的compareTo说它们具有相同的排序。所以你可以用两个不同的顺序结束邮政编码。例如,08123和08321可能最终为:
08123
08321
或
08321
08123
理想情况下,如果你想避免这种情况,你的compareTo应该不能返回0。要测试这是否可以解决问题,请尝试:
return ((cod1-cod2)==0 ? (this.codigoPostal.compareTo(otro.codigoPostal)) : (cod1-cod2));
而不是你当前的return语句。注意我不是说这是很好的代码,我怀疑整个方法可以重构,但想看看是否能解决问题。