检查字符串数组是否按字典顺序排列不区分大小写

时间:2014-11-19 16:52:48

标签: java arrays string boolean

我正在编写一个方法,它将字符串数组和整数n作为输入。该方法将检查直到n长度的字符串是否按字典顺序排列。 我的代码为每个输入返回false,我无法找出原因!

public static boolean isStringArraySorted(String[] strs, int n) {
    boolean answer=true; 

    for (String word : strs) {
        for(int i=1; i<strs.length; i++) {
            String check1 =word.substring(0,n); 
            String check2= strs[i].substring(0,n);
            if ( check1.compareToIgnoreCase(check2) > 0 )
                return false; 
        }
    }

    return answer; 
}

3 个答案:

答案 0 :(得分:1)

将循环更改为:

for (int j=0; j<strs.length; j++){
    for(int i=j+1; i<strs.length; i++){
        String word = strs[j];
        String check1 =word.substring(0,n); 
        String check2= strs[i].substring(0,n);
        if (check1.compareToIgnoreCase(check2)>0)
            return false; 

    }
}

关键是你做错了第二次循环是在错误的地方开始的。

答案 1 :(得分:1)

因为你在整个数组的内部for循环中进行迭代,而你应该只从 word 开始。

for (int j=1; j<strs.length; j++){
    for(int i=j+1; i<strs.length; i++){
        String word = strs[j];
        String check1 =word.substring(0,n); 
        String check2= strs[i].substring(0,n);
        if (check1.compareToIgnoreCase(check2)>0)
            return false; 

    }
}

答案 2 :(得分:0)

正如我在评论中提到的,你只需要一个循环来解决这个问题:

public static boolean isStringArraySorted(String[] strs, int n) {
  for (int i = 0; i < strs.length - 1; i++) {      
    String first = substring(strs[i], n);
    String second = substring(strs[i + 1], n);
    if (first.compareToIgnoreCase(second) > 0) {
      return false;
    }
  }
  return true;
}

private static String substring(String s, int n) {
  return s.substring(0, n > s.length() ? s.length() - 1 : n);
}