package mediumchallenge;
import java.util.Arrays;
import java.util.Comparator;
public class sortarrayofstringsbylength{
private static class comparelengths implements Comparator<String>{
@Override
public int compare(String arg0, String arg1) {
// TODO Auto-generated method stub
return (arg0.length()- arg1.length());
}
}
private static class lastchar implements Comparator<String>{
@Override
public int compare(String s1, String s2) {
// TODO Auto-generated method stub
return (s1.charAt(s1.length()-1) - s2.charAt(s2.length()-1));
}
}
public static void main(String args[]){
String arr[] = {"abd" , "abc","y" , "rtyuodfdjfhd","weq","wge",""};
Arrays.sort(arr);
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
// sorts according to length of string
Arrays.sort(arr, new comparelengths());
for(int j=0;j<arr.length;j++){
System.out.println(arr[j]);
}
//sorts lexicographically according to last letter
Arrays.sort(arr, new lastchar());
for(int k=0;k<arr.length;k++){
System.out.println(arr[k]);
}
}
}
我正在尝试使用比较器根据每个字符串的最后一个字符对字符串数组进行排序。它给了我字符串索引超出范围 -1 异常
最佳答案
解决方案是检查长度本身是否为零。
- 如果
s2
为空且s1
不为空,s2
应该落后于s1
所以我们返回-1
. - 如果
s1
为空且s2
不为空,s1
应该落后于s2
所以我们返回1
. - 如果
s2
为空且s1
是空的,它们是equal
我们应该返回0
.
下面是此类实现的示例:
@Override
public int compare(String s1, String s2) {
// Returns a negative integer, zero, or a positive integer
// as the first argument is less than, equal to, or greater than the second.
if(s1.length() == 0 && s2.length() > 0)return 1;
if(s2.length() == 0 && s1.length() > 0)return -1;
if(s2.length() == 0 && s1.length() == 0)return 0;
return (s1.charAt(s1.length()-1) - s2.charAt(s2.length()-1));
}
基本上,您需要决定是否允许空字符串以及遇到它们时采取什么操作(例如将它们推到下面)。
如果您希望首先使用空字符串:
if(s1.length() == 0 && s2.length() > 0)return -1;
if(s2.length() == 0 && s1.length() > 0)return 1;
if(s2.length() == 0 && s1.length() == 0)return 0;
如果您希望最后使用空字符串:
if(s1.length() == 0 && s2.length() > 0)return 1;
if(s2.length() == 0 && s1.length() > 0)return -1;
if(s2.length() == 0 && s1.length() == 0)return 0;
关于java - 根据最后一个字母表按字典顺序对字符串数组进行排序 - 字符串索引超出范围 -1 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21247573/