java - 基于Java中的给定模式对字符串数组进行排序
问题描述
我的输入字符串数组如下:
字符串[] arr = {“2T1BURHE1JCO24154C”、“2TABURHE1JC024154C”、“JTDKARFP5H3055472C”、“2T2BURHE1JCO24154C”、“JTDKARFP1H3056246C”};
输出数组应如下所示:
{"JTDKARFP1H3056246C",
"JTDKARFP5H3055472C",
"2TABURHE1JC024154C",
"2T1BURHE1JCO24154C",
"2T2BURHE1JCO24154C"}
这里优先级在以下模式中给出:
[ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]
当我在 Java 中使用 Arrays.sort(arr) 时,它以字典模式对数组进行排序并给出以下输出:
[2T1BURHE1JCO24154C、2T2BURHE1JCO24154C、2TABURHE1JC024154C、JTDKARFP1H3056246C、JTDKARFP5H3055472C]
我怎么能在Java中实现这一点。
谢谢。
解决方案
You need custom a Comparator, you can do it by compare the character's position in the order
:
public static void main(String[] args) {
String[] arr = {"2T1BURHE1JCO24154C",
"2TABURHE1JC024154C",
"JTDKARFP5H3055472C",
"2T2BURHE1JCO24154C",
"JTDKARFP1H3056246C"};
String order = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Arrays.sort(arr, (first, second) -> {
for (int index = 0; index < second.length(); index++) {
int charFirst = (int) (first.charAt(index));
int charSecond = (int) (second.charAt(index));
if (order.indexOf(charFirst) > order.indexOf(charSecond)) {
return 1;
} else if (order.indexOf(charFirst) < order.indexOf(charSecond)) {
return -1;
} else {
continue;
}
}
return 0;
});
for (String s : arr) {
System.out.println(s);
}
}
output:
JTDKARFP1H3056246C
JTDKARFP5H3055472C
2TABURHE1JC024154C
2T1BURHE1JCO24154C
2T2BURHE1JCO24154C
推荐阅读
- android - Android WorkManager - 是否可以在 Activity 中启动它并检查另一个中的状态?
- laravel - Laravel FormRequest 仅在最小数量的输入字段中验证最小字符串长度
- reactjs - 尝试将 Axios.all 的响应推送到 ComponentDidMount 中的状态,但得到不需要的生命周期响应
- autocomplete - 将点击自动完成添加到 conda env 激活脚本
- python - 如何在 Django 模板中增加变量?
- python - 在python中使用字典替换字符串元素
- apache - 我在使用 .htaccess 时遇到困难
- asp.net-core - 在将自定义 ITicketStore 实现返回的 Key 值发送到浏览器之前,.NET Core 对它做了什么?
- entity-framework-6 - 实体框架无法正确安装,Enable-Migrations 命令失败
- javascript - GraphQL 查询返回类型的“任何”数据类型