繁体   English   中英

Java如何将String数组中的所有char合并到一个新的String中?

[英]Java How do I merge all char from an array of String into a new String?

我正在制作一种方法

public static String merge(String... s)

这是输入:

String a = merge("AM ","L","GEDS","ORATKRR","","R TRTE","IO","TGAUU");
System.out.println(a);

预期产出:

ALGORITMER OG DATASTRUKTURER

我尝试多次运行循环,以便它获取s [0] .charAt(索引)并将其附加到字符串以进行输出。 我遇到的问题是,当我尝试为s [1] .charAt(1)运行循环时,它为null,我希望它不会得到StringIndexOutOfBoundsException,而是继续s [2]并附加s [2]。 char到String。

我该怎么做?

在尝试访问其第i个字符之前,您需要检查每个String的长度:

StringBuilder sb = new StringBuilder();
int index = 0;
boolean maxLengthReached = false;
while (!maxLengthReached) {
    maxLengthReached = true;
    for (String str : input) {
        if (index < str.length) {
            sb.append(str.charAt(index));
            maxLengthReached = false;
        }
    }
    index++;
}

return sb.toString();

为了澄清,我使用布尔值maxLengthReached来确定何时将最长String的最后一个字符附加到输出。 如果在输入数组中的所有String的完整迭代中,我们找不到任何足够长的String以具有charAt(index) ,我们知道我们已经完成了。

首先,你需要一个方法来获得最长的String ,类似于 -

private static String getLongestString(String... arr) {
    String str = arr[0];
    for (int i = 1; i < arr.length; i++) {
        if (arr[i].length() > str.length()) {
            str = arr[i];
        }
    }
    return str;
}

然后你可以在merge()编写一个嵌套循环,类似于 -

public static String merge(String... stringArray) {
    StringBuilder sb = new StringBuilder();
    int pos = 0;
    int len = getLongestString(stringArray).length();
    while (pos < len) {
        for (String str : stringArray) {
            if (str.length() > pos) {
                sb.append(str.charAt(pos));
            }
        }
        pos++;
    }
    return sb.toString();
}

然后你可以称之为 -

public static void main(String[] args) {
    String a = merge("AM ", "L", "GEDS", "ORATKRR", "", "R TRTE", "IO",
            "TGAUU");
    System.out.println(a);
}

输出是(要求的) -

ALGORITMER OG DATASTRUKTURER

以下代码可以满足您的需求。 它适用于任意数量的字符串,因为它使用varargs(三个点),允许您将任意数量的字符串传递给merge

使用getLongest ()查找最长字符串的长度。

static int getLongest(String... strings) {
    int len = 0;
    for(String str : strings) {
        if(str.length() > len) {
            len = str.length();
        }
    }
    return len;
}

然后将每个String所有第i个字符合并到StringBuilder

static String merge(String ...strings) {

    int longest = getLongest(strings);

    StringBuilder sb = new StringBuilder();
    for(int i = 0; i < longest; i++) {
        for(String str : strings) {
            if(i < str.length()) {
                sb.append(str.charAt(i));
            }
        }
    }
    return sb.toString();
}

public static void main(String[] args) {

String a = merge("AM ","L","GEDS","ORATKRR","","R TRTE","IO","TGAUU"); 
System.out.println(a);      
}

产量

ALGORITMER OG DATASTRUKTURER

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM