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异常
答案 0 :(得分: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;
答案 1 :(得分:0)
String arr [] = {“abd”,“abc”,“y”,“rtyuodfdjfhd”,“weq”,“wge”,“”};
最后一个元素是“”,它的长度为零。 代码“s1.charAt(s1.length() - 1)”将抛出String索引超出范围-1异常。