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

给定两个字符串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; } 

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

 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或两者来“逐步”进行每一步。 一旦字符串用完字符,其相应的位置就会停止前进。 当两个位置到达终点时,循环结束。

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

我使用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 

使用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(); } 

这是我的尝试::

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=b.length()){ for(int i=0;ib.length()){ for(int j=startValue;j 
 public String mixString(String a, String b) { StringBuilder sb = new StringBuilder(""); int longer = 0; if (a.length()>b.length()) longer = a.length(); else longer = b.length(); for (int i = 0; i