Java 是否有一种方法可以从每行的数组中打印出不同数量的元素

Java 是否有一种方法可以从每行的数组中打印出不同数量的元素,java,arrays,string,Java,Arrays,String,我希望能够在每一行上打印出数组中不同数量的元素 String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi", "George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"}; System.out.println(Arrays.toString(name)); 这个的输出会给我 [Alix, Jack,

我希望能够在每一行上打印出数组中不同数量的元素

 String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi", 
             "George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};
         System.out.println(Arrays.toString(name));
这个的输出会给我

[Alix, Jack, Alexis, Adam, John, Lexi, George, Gregory, Paul, Bjorn, Aaron, Joseph, Anderson]
但我希望输出的内容与

[Alix, Jack, Alexis]

[Adam, John, Lexi]

[George, Gregory]

[Paul, Bjorn, Aaron, Joseph, Anderson]

有办法做到这一点吗?在我的示例中,每行中的元素数量并不是一成不变的,重要的是我可以改变输出中每行中出现的名称数量。谢谢

您可以手动拆分阵列并使用
copyOfRange
方法

import java.util.Arrays;

public class HelloWorld {

     public static void main(String []args){
        String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi", 
             "George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};

        int splitArrayForSize = 3; 

        for(int i=0; i< name.length; i+=splitArrayForSize){

            String[] subArray = Arrays.copyOfRange(name, i, 
                                        Math.min(name.length, i + splitArrayForSize));

            String subArrayAsString = Arrays.toString(subArray);
            System.out.println(subArrayAsString);   
        }  
    }
}

我相信有一种更简单、更实用的方法来实现这一点。我对这种方法很感兴趣。

这里有一个示例,可以让您为每个列表提供一个大小列表,这样您就可以轻松生成所指示的输出,而不必在每个列表中有3个名称:

package com.inlet.ifserver;

import java.util.Arrays;

public class x {

    public static void main(String ...args) {
        String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi",
                "George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};

        int[] counts = { 3, 3, 2 };

        int start = 0;
        for (int count : counts) {
            int end = Integer.min(start + count, name.length);
            if (end == start)
                break;
            System.out.println(Arrays.toString(Arrays.copyOfRange(name, start, end)));
            start = end;
        }
        if (start < name.length)
            System.out.println(Arrays.toString(Arrays.copyOfRange(name, start, name.length)));
    }
}

正如@Sid所提到的
Arrays.copyOfRange
就是这个方法。本例提供了不同块长度的数组,因此它与问题中的预期输出相匹配。看起来像这样

public static void printInBlocks(String[] arr, int[] blocks) {
    int idx = 0;

    for (int blockSize: blocks) {
        String str = Arrays.toString(Arrays.copyOfRange(name, idx, idx += blockSize));
        System.out.println(str);
    }
}
public static void main(String[] args) {
    String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi",
            "George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};
    int[] blocks = {3, 3, 2, 5};

    printInBlocks(name, blocks);
}
然后,您可以像这样从
Main
调用它

public static void printInBlocks(String[] arr, int[] blocks) {
    int idx = 0;

    for (int blockSize: blocks) {
        String str = Arrays.toString(Arrays.copyOfRange(name, idx, idx += blockSize));
        System.out.println(str);
    }
}
public static void main(String[] args) {
    String[] name = {"Alix", "Jack", "Alexis", "Adam", "John", "Lexi",
            "George", "Gregory", "Paul", "Bjorn", "Aaron", "Joseph", "Anderson"};
    int[] blocks = {3, 3, 2, 5};

    printInBlocks(name, blocks);
}
输出看起来像

[Alix, Jack, Alexis]
[Adam, John, Lexi]
[George, Gregory]
[Paul, Bjorn, Aaron, Joseph, Anderson]

包含每行项目数的
的总和必须等于项目数
名称

您可以根据大小拆分数组,然后打印它们。我是否需要使用ArrayList来完成此操作?不要太快地向上投票,并接受实际上不符合您要求的答案(你可以改变主意)。@Sid。你没有回答那家伙的问题。他说每行的项目数量不是“一成不变的”,在他的例子中,每一行上的名字数量在不同的行之间是不同的。-乔说得对!@Steve只要有帮助,我同意接受任何答案。我们都使用
数组。copyOfRange
,它是@Sid首先发布的。这是解决方案的核心,其余的只是“味道”@Sid,但这无助于社区接受一个没有给出您指定输出的答案,特别是当有其他人这样做时。@Steve这是我同意的。如果其他答案更好,我同意。记住,不是我接受了这个答案。我们可以敦促OP接受另一个更好的答案。Joe的答案是更健壮。@molamk,我认为如果你不在块列表中给出正确的数字,你的会崩溃。Joe's会尽其所能处理它给出的任何列表,并且忽略超出输入列表允许范围的组大小。我完全同意这一点,它更健壮。问题不在于“健壮性”如果是这样的话,我们将编写空检查、单元测试和溢出测试