有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中检查字符串数组中所有字符串的长度是否相等

我试图解决一个问题,在这个问题中,我得到了一个字符串数组,我必须检查它们是否都有相同的长度。例如,如果给我数组{"apple","purple","lemon"},那么我的方法应该返回true,当给我数组{"red","blue"}时,它应该返回false

到目前为止,我就是这么做的,但它不起作用。谢谢你的帮助

public static boolean allEqualLength(String[] myArray){
    int i;
    for(i=0;i<myArray.length;i++){
        if(myArray[i]!=myArray[i+1])
            return false;
        }    
    return true,
}

共 (4) 个答案

  1. # 1 楼答案

    您正在尝试比较字符串本身。你应该只比较长度

    myArray[i].length() != myArray[i + 1].length()
    

    顺便说一下,这将抛出一个ArrayIndexOutOfBoundsException,因为您正试图访问索引myArray[myArray.length]。将for循环更改为

    for (int i = 0; i < myArray.length - 1; i++) {
        if (myArray[i].length() != myArray[i + 1].length()) {
            return false;
        }
    }
    

    如果数组长度为0或1,还要确保返回true,因为循环无法处理这些

  2. # 2 楼答案

    如果性能不是一个问题,你不会在100万个字符串中使用它,除了所有这些答案之外,这里有一句话:

    boolean allStringsEqualLength = Stream.of(array)
            .map(String::length).distinct().count() == 1;
    

    其想法是将每个字符串映射到其长度。因此,如果distinct()流只包含一个值,这意味着所有字符串的长度都相同

  3. # 3 楼答案

    例如,数组的长度为4,位置为0,1,2,3,所以在代码中使用:myArray[i]!=myArray[i+1]所以在上次运行时检查位置: 3和4,你会得到ArrayIndexOutOfBoundsException,你需要在循环条件下改变为:length-1,如下所示:

    public static boolean allEqualLength(String[] myArray){
        int i;
        for(i=0;i<myArray.length -1;i++){
            if(myArray[i].length() != myArray[i+1].length())
                return false;
            }    
        return true,
    }
    

    如果你在myArray上运行。长度,检查的位置:

    0--1
    1--2
    2--3
    3--4 // ERROR !!! ArrayIndexOutOfBoundsException !!
    

    如果你在myArray上运行。长度-1,检查的位置:

    0--1
    1--2
    2--3 -OK !!!
    

    因此,如果以这种方式运行数组:myArray.length-1,将不会得到ArrayIndexOutOfBoundsException

  4. # 4 楼答案

    所有具有相同长度的项目等同于说所有项目必须与第一个项目具有相同的长度:

    public static boolean allEqualLength(String[] myArray) {
        // zero items => "all" items have same length:
        if (myArray.length == 0) return true;
        final int expectedLength = myArray[0].length();
        for(int i = 0; i < myArray.length; ++i) {
            if(myArray[i].length() != expectedLength)
                return false;
        }    
        return true,
    }
    

    但你最初的解决方案并不遥远。只需确保不超过数组的界限,并比较字符串长度,而不是字符串本身:

    public static boolean allEqualLength(String[] myArray) {
             for(int i=0; i < myArray.length - 1; i++) { // -1 to not exceed bounds
                 if(myArray[i].length() != myArray[i+1].length()) // compare length, not memory addresses
                    return false;
             }    
             return true,
    }