子串替代

时间:2015-04-08 19:29:55

标签: java loops substring

所以我正在创建一个程序,它将输出字符串的第一个字符,然后输出另一个字符串的第一个字符。然后是第一个字符串的第二个字符和第二个字符串的第二个字符,依此类推。

我创建了下面的内容,我只是想知道是否有使用循环或其他东西而不是子串的替代方法

public class Whatever
{
   public static void main(String[] args)
   {
      System.out.println (interleave ("abcdefg", "1234"));
   }
   public static String interleave(String you, String me)
   {
      if (you.length() == 0) return me;
      else if (me.length() == 0) return you;

      return you.substring(0,1) + interleave(me, you.substring(1));
   }
}

输出:a1b2c3d4efg

5 个答案:

答案 0 :(得分:1)

好吧,如果你真的不想使用子串,你可以使用String的toCharArray()方法,然后你可以使用StringBuilder来附加字符。通过这个,你可以循环遍历每个数组的索引。

这样做,结果就是:

public static String interleave(String you, String me) {
    char[] a = you.toCharArray();
    char[] b = me.toCharArray();
    StringBuilder out = new StringBuilder();

    int maxLength = Math.max(a.length, b.length);

    for( int i = 0; i < maxLength; i++ ) {
        if( i < a.length ) out.append(a[i]);
        if( i < b.length ) out.append(b[i]);
    }
    return out.toString();
}

尽管如此,您的代码仍然足够高效。如果你真的想避免子串,这可以是另一种选择。

答案 1 :(得分:1)

这是一个循环实现(不处理空值,只是为了显示逻辑):

public static String interleave(String you, String me) {
    StringBuilder result = new StringBuilder();

    for (int i = 0 ; i < Math.max(you.length(), me.length()) ; i++) {
        if (i < you.length()) {
            result.append(you.charAt(i)); }
        if (i < me.length()) {
            result.append(me.charAt(i));
        }
    }

    return result.toString();
}

答案 2 :(得分:0)

我建议的解决方案是基于预期的输出 - 在您的特定情况下考虑使用String的split方法,因为您在字符上交叉。

所以做这样的事情,

String[] xs = "abcdefg".split("");

String[] ys = "1234".split("");

现在遍历较大的数组并确保交错,确保在访问之前对较小的数组执行长度检查。

答案 3 :(得分:0)

要将其作为一个循环来实现,你必须保持位置并继续添加,直到一个完成然后开始其余部分。任何更大的字符串都应该使用StringBuilder。像这样(未经测试):

int i = 0;
String result = "";

while(i <= you.length() && i <= me.length())
{
    result += you.charAt(i) + me.charAt(i);
    i++;
}

if(i == you.length())
    result += me.substring(i);
else
    result += you.substring(i);

答案 4 :(得分:0)

改进(在某种意义上)@BenjaminBoutier回答。

StringBuilder是连接字符串的最有效方法。

public static String interleave(String you, String me) {
    StringBuilder result = new StringBuilder();

    int min = Math.min(you.length(), me.length());
    String longest = you.length() > me.length() ? you : me;

    int i = 0;
    while (i < min) { // mix characters
        result.append(you.charAt(i));
        result.append(me.charAt(i));
        i++;
    }
    while (i < longest.length()) { // add the leading characters of longest
        result.append(longest.charAt(i));
        i++;
    }

    return result.toString();
}