Tur*_*cia 3 php java sorting collections
PHP 脚本按降序输出电子邮件地址列表,如下所示:
_abc_@testmail.com
_abc45_@testmail.com
_abc2_@testmail.com
ypaux2aux@yahoo.com
yaremchuk56@testmail.com
vasillevn@hotmail.com
ugur@hotmail.com
twes@gmail.com
tukaux@yahoo.com
ttsetaux1@yahoo.com
tra@testmail.com
Run Code Online (Sandbox Code Playgroud)
在 Java 中,我从这些电子邮件创建一个 ArrayList,然后按降序排序。结果不一样:
ypaux2aux@yahoo.com
yaremchuk56@testmail.com
vasillevn@hotmail.com
ugur@hotmail.com
twes@gmail.com
tukaux@yahoo.com
ttsetaux1@yahoo.com
tra@testmail.com
_abc45_@testmail.com
_abc2_@testmail.com
_abc_@testmail.com
Run Code Online (Sandbox Code Playgroud)
差异是由下划线“_”引起的。我想实现与 PHP 脚本相同的排序顺序。我怎样才能做到这一点?我无法访问 PHP 代码。
我使用的Java测试代码是:
import java.util.ArrayList;
import java.util.Collections;
public class sorty {
public static void main(String[] args) {
ArrayList<String> listStrings = new ArrayList<>();
listStrings.add("_abc_@testmail.com");
listStrings.add("_abc45_@testmail.com");
listStrings.add("_abc2_@testmail.com");
listStrings.add("ypaux2aux@yahoo.com");
listStrings.add("yaremchuk56@testmail.com");
listStrings.add("vasillevn@hotmail.com");
listStrings.add("ugur@hotmail.com");
listStrings.add("twes@gmail.com");
listStrings.add("tukaux@yahoo.com");
listStrings.add("ttsetaux1@yahoo.com");
listStrings.add("tra@testmail.com");
for (int i = 0; i < listStrings.size(); i++) {
System.out.println(listStrings.get(i));
}
Collections.sort(listStrings);
Collections.reverse(listStrings);
for (int i = 0; i < listStrings.size(); i++) {
System.out.println(listStrings.get(i));
}
;
}
}
Run Code Online (Sandbox Code Playgroud)
我会使用适当的Collator. 实现自己的比较器并不是最简单的事情。最好的是,如果您对默认设置之一感到满意。例如
Collections.sort(listStrings, Collator.getInstance(Locale.US));
Run Code Online (Sandbox Code Playgroud)
或者类似的。
如果现有的都不适合您,那么使用基于规则的整理器将使您的意图更清晰,然后实现比较器 imo:
String rules = "< a < b < c < '_'" //etc
Collections.sort(listStrings, new RuleBasedCollator(rules));
Run Code Online (Sandbox Code Playgroud)