在Java中逐字合并两个字符串?

时间:2013-12-11 01:43:45

标签: java string

  

给定两个字符串A和B,创建一个由A的第一个字符组成的较大字符串,B的第一个字符,A的第二个字符,B的第二个字符,依此类推。任何剩余的字符都会在结果的末尾出现。

public String mixString(String a, String b)
{


    String str = "";
    int len = 0;

    if (a.length() >= b.length())
    {
        len = a.length();
    } else
        len = b.length();

    for (int i = 0; i < len; i++)
    {

        if (i < a.length())
        {
            str += a.charAt(i);
        }

        if (i < b.length())
        {
            str += b.charAt(i);
        }

    }
    return str;
}

6 个答案:

答案 0 :(得分:5)

你有一个可行的方法,但你可以通过使用一个带有两个计数器的循环来显着简化它:

int apos = 0, bpos = 0;
while (apos != a.length() || bpos != b.length()) {
    if (apos < a.length()) m += a.charAt(apos++);
    if (bpos < b.length()) m += b.charAt(bpos++);
}

在此循环中,您将通过推进aposbpos或两者来“逐步”完成每一步。一旦字符串用完字符,其对应的pos就会停止前进。当pos到达目的地时,循环结束。

注意:当您需要在循环中追加字符串时,请使用StringBuilder

答案 1 :(得分:1)

我使用Merge排序方法来解决这个问题。首先,我将两个字符串转换为各自的字符数组,然后合并两个数组并将数组转换回字符串。您可以在下面找到我的代码,我已经测试了代码并且它正在运行。如果您有任何疑问,请告诉我。

public String merge(String leftStr, String rightStr) {  
        char[]left = leftStr.toCharArray();
        char[]right = rightStr.toCharArray();
        int nL = left.length;
        int nR= right.length;
        char[] mergeArr= new char[nL+nR];
        int i=0,j=0,k=0;
        int temp =0;
        while(i<nL && j<nR){

            if (temp==0){
                mergeArr[k]=left[i];
                i++;
                temp =1;
            }else{
                mergeArr[k]=right[j];
                j++;
                temp=0;
            }
            k++;            
        }
        while(i<nL){

            mergeArr[k]=left[i]; k++; i++;
        }
        while(j<nR){

            mergeArr[k]=right[j]; k++; j++;
        }


        return new String(mergeArr);

    }

答案 2 :(得分:0)

使用StringBuilderchar[]的另一种方法。只要第一个比第二个长,就可以工作,这是由第一个方法保证的。

public String mixString(String a, String b) {
    if (b.length() > a.length())
        return mixString(new StringBuilder(b), a.toCharArray(), 0);
    return mixString(new StringBuilder(a), b.toCharArray(), 1);
}

public String mixString(StringBuilder ab, char[] b, int start) {
    int i = 0;
    for (char c : b)
        ab.insert(i++*2 + start, "" + c);
    return ab.toString();
}

答案 3 :(得分:0)

这是我的尝试::

public static String mixString1(String a,String b){

    String result="";

    int startValue = 0;
    int increment = 0;

    if(a.length()<=b.length()){

    for(int i=0;i<a.length();i++){

            result =  result+a.charAt(i)+b.charAt(i);

    }

    }

    else if(a.length()>=b.length()){

        for(int i=0;i<b.length();i++){

                result =  result+a.charAt(i)+b.charAt(i);

        }

        }


    if(a.length()<b.length()){

        startValue= a.length();
        increment = b.length();

    }

    else {

        startValue= b.length();
        increment = a.length();

    }

    if(a.length()<b.length()){

    for(int j=startValue;j<increment;j++){

        result = result+b.charAt(j);

    }
    }
    else if(a.length()>b.length()){

        for(int j=startValue;j<increment;j++){

            result = result+a.charAt(j);

        }


    }

    return result;
    }

答案 4 :(得分:0)

public String mixString(String a, String b) {
  String c="";
  String left="";
  int min;
  if(a.length()>b.length()) {
      min=b.length();
     left=a.substring(b.length(),a.length());
  }
  else {
      min=a.length();
      left=b.substring(a.length(),b.length());
  }

  for(int i=0;i<min;i++) {
      c +=a.substring(i,i+1)+b.substring(i,i+1);

  }   
return c+left;            
}

答案 5 :(得分:0)

这是我的方法,欢迎反馈

void printPattern(String str, String str1){
    int length1 = str.length();
    int length2 = str1.length();
    int i =0;
    String output ="";
    while(length1 > 0 && length2 > 0){
         output += (str.charAt(i)) ;
         output += (str1.charAt(i)) ;
        length1-- ; length2-- ; i++;
    }
    System.out.println(output);
}
相关问题