将字符串数组合并为字符串的方法

时间:2017-03-16 03:27:01

标签: java arrays string

好的,所以我不确定如何从一堆字符串数组创建一个字符串。 我有这个方法,它接收3个字符串数组

public static String formatStory(String[] shortest, String[] medium, String[] longest){

    return formattedStory;
}

我想用一个长词,一个中等单词和一个短单词并将其添加到一个字符串中,然后重复循环再重复一遍,直到字符串Arrays中没有任何单词为止。我会使用while循环,因为我不知道需要多少次迭代?或者循环?

6 个答案:

答案 0 :(得分:0)

使用while,但请确保在每次迭代中都有3个字符串值。 这是一个非常高的内存和CPU使用功能,可能你应该考虑如何稍微确定它。

我希望有所帮助。

答案 1 :(得分:0)

您也可以使用for循环。

String s = "";
for (int i = 0; i < shortest.length; i++) {
  s = s + longest[i] + medium[i] + shortest[i];
}
return s;

答案 2 :(得分:0)

它并不那么简单,我不确定只使用一个循环就可以解决它。对我而言,它需要两个函数和java等效的foreach-loop来解决任务。另外,我建议使用列表。 首先,您需要按位置对三个数组中的单词进行分组。 第二,结果字符串必须连接成一个。 请检查以下代码。

import java.util.*;

/*Some code...*/

private static void insertArrayIntoList(List<String> items, String[] array) {
    if(array == null) return;
    int count = 0;
    for(String item : array) {
        if(items.size() > count) {
            String temp = items.get(count);
            temp += " " + item;         
            items.set(count, temp);
        } else {
            items.add(item); 
        }
        count++;
    }
}
public static String formatStory(String[] shortest, String[] medium, String[] longest){ 

    List<String> items = new ArrayList<String>();

    insertArrayIntoList(items, shortest);
    insertArrayIntoList(items, medium);
    insertArrayIntoList(items, longest);

    String formattedStory = "";
    for(String item : items) {
       formattedStory += ((formattedStory.length() == 0) ? "" : " ") + item;                          
    }
    return formattedStory;
}

答案 3 :(得分:0)

如果你不确定哪个数组是最短的,你可以先检查它,而不是在找到它之后你可以创建一个for loop,这样你总能得到所有三个数组中值最小的值。最薄弱的环节......就像这样:

 private static void doStackOverflow() {
     String[] shortest = {"one", "two", "three", "four"};
     String[] medium = {"a", "b", "c", "d", "e", "f"};
     String[] longest = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};

     System.out.println(formatStory(shortest, medium, longest));
 }

 public static String formatStory(String[] shortest, String[] medium, String[] longest) {

     int weakestLink = findWeakestLink(shortest.length, medium.length, longest.length);

     String formattedStory = "";
     for (int i = 0; i < weakestLink; i++) {
         formattedStory += shortest[i] + " " + medium[i] + " " + longest[i] + " ";
     }

     return formattedStory;
 }

 private static int findWeakestLink(int shortest, int medium, int longest) {
     int result = shortest + medium + longest;

     if (shortest < result)
         result = shortest;
     if (medium < result)
         result = medium;
     if (longest < result)
         result = longest;

     return result;
 }

答案 4 :(得分:0)

“快速而肮脏”(imo)解决方案就是:

public static String formatStory(String[] shortest, String[] medium, String[] longest) {

    int s = shortest.length;
    int m = medium.length;
    int l = longest.length;

    int max = Integer.max(s, Integer.max(m, l));

    StringBuilder result = new StringBuilder();

    for (int i = 0; i < max; i++) {
        if (i < l)
            result.append(longest[i]).append(" ");
        if (i < m)
            result.append(medium[i]).append(" ");
        if (i < s)
            result.append(shortest[i]).append(" ");
    }

    return result.toString().trim();
}

在所有数组中,只取最大数组的长度,循环(for循环索引),看起来,如果数组中仍有一个元素(index < length)并附加它。您还可以使用String,只需将其附加到+,如果这更适合您的风格。

答案 5 :(得分:-1)

你可以使用for循环或while循环,因为两个循环都会采用与数组长度相同的条件。只有当所有三个字符串数组具有相同大小时,一个循环才会起作用,否则您必须以不同方式编写它以优化性能。 还可以使用StringBuilder而不是串联来获得更好的内存性能。