【问题标题】:Java How do I merge all char from an array of String into a new String?Java 如何将字符串数组中的所有字符合并到一个新的字符串中?
【发布时间】:2014-09-09 19:07:26
【问题描述】:

我正在做一个方法

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(index) 并将其附加到字符串以进行输出。我遇到的问题是,当我尝试为 s[1].charAt(1) 运行循环时,它为空,我希望它不会得到 StringIndexOutOfBoundsException,而是继续到 s[2] 并附加 s[2]。 char 到字符串。

我该怎么做?

【问题讨论】:

  • 使用if语句判断是否为空
  • 你能发布你到目前为止的代码吗?
  • 感谢所提供的帮助,代码运行正常。我很难在 2 天内完成这项工作,因为我尝试了多个嵌套的 for 循环,这些循环遇到了具有空值的字符串索引。

标签: java arrays algorithm data-structures


【解决方案1】:

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

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 的最后一个字符附加到输出中。如果在输入数组中的所有Strings 的完整迭代中,我们没有找到任何足够长的String 来拥有charAt(index),我们就知道我们已经完成了。

【讨论】:

  • 也许可以重命名“theEnd”以帮助理解算法。也许像“characterAdded”
【解决方案2】:

首先你需要一个方法来获得最长的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

【讨论】:

  • 你没有来获得最长的字符串。请参阅@Eran 答案。
【解决方案3】:

以下代码可以满足您的需要。它适用于任意数量的字符串,因为它使用可变参数(三个点),允许您将任意数量的字符串传递到 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

【讨论】:

  • 你没有来获得最长的字符串。请参阅@Eran 答案。
  • 我从来没有说过你必须找到最长的字符串。同意,@Eran 的回答很好:)
猜你喜欢
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
相关资源
最近更新 更多