[英]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.