java - 更改包含特殊字符的字符串的排序顺序(例如 "_")

标签 java php 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

在 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

不同之处在于下划线“_”。我想实现与 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));

        }
        ;

    }

}

最佳答案

我会使用合适的 Collat​​or。实现自己的比较器不是 最琐碎的事情。如果您对默认设置之一感到满意,那将是最好的。例如

Collections.sort(listStrings, Collator.getInstance(Locale.US));

或类似的。

如果现有的都不适合你,那么使用 rule based collator将使 你的意图比实现比较器 imo 更清晰:

String rules = "< a < b < c < '_'" //etc
Collections.sort(listStrings, new RuleBasedCollator(rules));

关于java - 更改包含特殊字符的字符串的排序顺序(例如 "_"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23362143/

相关文章:

c# - 在 C# 中包私有(private)?

java - 矩形类和 containsPoint 方法

arrays - 按特定参数对 c 中的结构体数组进行排序

python - 使用对象列表对嵌套列表进行排序

java - 在构建 Android 应用程序之前将 jars 从其他目录拉到 libs 文件夹

java - Hibernate 无法访问 phpMyAdmin 插入的数据

php - 如何检查PHP中的方法是否是静态的?

javascript - 根据 URL 或 URL 字符串前缀不同的 html、body 背景

php - 如何根据 Laravel 中两个表中存在的唯一列组合两个表

c++ - 如果没有明确的 < 运算符,std::less 如何工作?