我需要对包含数字的字符串进行排序
例如:
input : {"1","12","12","2","ABC","a"}
Expected output: 1 2 12 a ABC
My output :1 2 12 12 a ABC
我无法删除重复项。有人可以帮我吗?
下面是我用于排序的代码
public static String[] Sort(String[] list) {
Comparator<String> comp = new Comparator<String>() {
public int compare(String str1, String str2) {
try {
int num1 = Integer.parseInt(str1);
int num2 = Integer.parseInt(str2);
return Integer.compare(num1, num2);
}
catch (NumberFormatException e) {
return str1.compareTo(str2);
}
}
};
Arrays.sort(list, comp);
return list;
}
预先感谢
答案 0 :(得分:1)
解决此问题的最简单方法是使用 流 。 这样我们就可以使用单行代码来解决这个问题。
String[] sorted = Arrays.stream(list).distinct().sorted((s1,s2)->compare(s1,s2)).toArray(String[]::new);
编辑:增加了给定比较器的使用,以完全支持数字字符串和其他字符串。
此外,比较器应在应用toLowerCase()
之后比较字符串。结果
catch (NumberFormatException e) {
return str1.toLowerCase().compareTo(str2.toLowerCase());
}
答案 1 :(得分:0)
Set可用于删除重复项
public static Set<String> sort(String[] list) {
Comparator<String> comp = new Comparator<String>() {
public int compare(String str1, String str2) {
try {
int num1 = Integer.parseInt(str1);
int num2 = Integer.parseInt(str2);
return Integer.compare(num1, num2);
}
catch (NumberFormatException e) {
return str1.compareTo(str2);
}
}
};
Set<String> set = new TreeSet<String>(comp);
set.addAll(Arrays.asList(list));
System.out.println(set);
return set;
}
答案 2 :(得分:0)
您还希望排序并删除重复项。这意味着比较器很难同时完成这两个过程,您需要在数组中获取不同的字符串,因此排序然后仅获取不同的字符串,有很多方法,但是我做到了,这很容易理解:
public static String[] Sort(String[] list) {
Comparator<String> comp = new Comparator<String>() {
public int compare(String str1, String str2) {
try {
int num1 = Integer.parseInt(str1);
int num2 = Integer.parseInt(str2);
return Integer.compare(num1, num2);
}
catch (NumberFormatException e) {
return str1.compareTo(str2);
}
}
};
Arrays.sort(list, comp);
ArrayList<String> new_list = new ArrayList<String>;
if(list.length()>0){
new_list.add(list[0]);
}
for(String s : list){
//comparing with the last added string in list, if not same then add
if(!new_list.get(new_list.size()-1).equals(s)){
new_list.add(s);
}
}
return new_list.toArray(new String[new_list.size()]);
}
答案 3 :(得分:0)
尝试一下。我包括了一组更复杂的相同元素进行验证。
String[] vals = {"1","ABC","12","a", "1", "2", "12","2","ABC", "a", "ABC","a"};
Comparator<String> comp = ((a,b)-> {
if (a.matches("\\d+") && b.matches("\\d+")) {
return Integer.compare(Integer.valueOf(a), Integer.valueOf(b));
} else {
return a.toLowerCase().compareTo(b.toLowerCase());
}
});
String[] result = Arrays.stream(vals).distinct().sorted(comp).toArray(String[]::new);
System.out.println(Arrays.toString(result));
打印
[1, 2, 12, a, ABC]
答案 4 :(得分:0)
您已经问了两个不同的问题! 首先讲:
<?php
return [
.....
'providers' => [
.....
Anhskohbo\NoCaptcha\NoCaptchaServiceProvider::class
],
'aliases' => [
.....
'NoCaptcha' => Anhskohbo\NoCaptcha\Facades\NoCaptcha::class,
]
]