2011-03-06 143 views
2

我试图写一段代码,将要求从用户两个字符串。我如何编写代码,以便通过交替两个字符串的字符形成一个新的String。字符串交替字母

任何帮助表示赞赏

+3

是这个家庭作业?还有,两个琴弦的长度是否相等?当一个字符串比另一个更长时会发生什么? – 2011-03-06 02:14:42

+0

没有字符串的长度不相等...如果一个比另一个长,它应该打印最长的一个末尾 – John 2011-03-06 02:35:27

回答

2

简单的 “哑” 的做法:)

class StringMerge 
{ 
    public static String merge(String a, String b) 
    { 
    if (a == null || a.length() == 0){ return b; } 
    else if(b == null || b.length() == 0){ return a; } 
    else 
    { 
     StringBuffer merged = new StringBuffer(); 
     int aIndex = 0; 
     int bIndex = 0; 
     while(aIndex < a.length() && bIndex < b.length()) 
     { 
      merged.append(a.charAt(aIndex)); 
      merged.append(b.charAt(bIndex)); 

      aIndex++; 
      bIndex++; 
     } 
     while(aIndex < a.length()) 
     { 
      merged.append(a.charAt(aIndex)); 
      aIndex++; 
     } 
     while(bIndex < b.length()) 
     { 
      merged.append(b.charAt(bIndex)); 
      bIndex++; 
     } 

     return merged.toString(); 
    } 
    } 
} 
0

假设用户输入相同长度的两个字符串:

  1. 建立一个新的,空的字符串。
  2. 循环...
  3. 如果Index % 2 == 0,请从用户输入的第二个字符串中取出字符,并将其添加到空字符串中。
  4. 否则,从第一个字符串中取出字符并将其添加到空字符串中。
  5. 当没有更多字符添加时停止循环。
2

甲稍短和更快[由于StringBuilder的]的mohaps'的方法版本:

class StringMerge { 
    public static String merge(final String a, final String b) { 
     if (a == null || a.length() == 0) { 
      return b; 
     } else if (b == null || b.length() == 0) { 
      return a; 
     } else { 
      final int aLength = a.length(); 
      final int bLength = b.length(); 
      final StringBuilder merged = new StringBuilder(aLength + bLength); 

      for (int i = 0, j = 0; i < aLength && j < bLength; i++, j++) { 
       merged.append(a.charAt(i)).append(b.charAt(j)); 
      } 

      if (aLength != bLength) { 
       if (aLength > bLength) { 
        merged.append(a.substring(bLength)); 
       } else { 
        merged.append(b.substring(aLength)); 
       } 
      } 

      return merged.toString(); 
     } 
    } 
} 

编辑:添加长度,同时创造StringBuilder实例

+0

这真的帮助了很多....我还没有真正学过数组,所以一直都没有理解yanicks 。 – John 2011-03-06 02:41:56

+0

@John - 传递一些能够帮助你成长为程序员的东西。总是尝试从“无解”中获得“解决方案”,然后尝试对其进行优化。请不要在本声明中阅读任何讽刺或sn,声,无意用于:)我总是告诉开发者,我在我的团队中进行指导,并亲自发现了这种增长自己的技能和理解的好方法 – mohaps 2011-03-06 02:57:08

+0

谢谢感谢。我一定会记住 – John 2011-03-06 03:05:18

1

差不多相同mohaps和枕套( 微笑),但使用的数组:

static public void main(String...args) { 

    Scanner scanner = new Scanner(System.in); 

    System.out.print("String 1 : "); 
    String s1 = scanner.nextLine(); 

    System.out.print("String 2 : "); 
    String s2 = scanner.nextLine(); 

    System.out.println("Combined string is : " + mergeStrings(s1, s2)); 
} 

static public String mergeStrings(String a, String b) { 
    if (a == null) a = ""; 
    if (b == null) b = ""; 

    char[] chars = new char[a.length() + b.length()]; 
    int index = 0, ia = 0, ib = 0; 
    while (ia<a.length() && ib<b.length()) { 
     chars[index++] = a.charAt(ia++); 
     chars[index++] = b.charAt(ib++); 
    } 
    while (ia<a.length()) { 
     chars[index++] = a.charAt(ia++); 
    } 
    while (ib<b.length()) { 
     chars[index++] = b.charAt(ib++); 
    } 

    return new String(chars); 
} 

** UPDATE **

稍微改进,加入一个start位置(默认为0)开始在从a特定位置合并。如果start为负数,则该方法的行为如同0。如果start大于字符串a的长度,则字符串将用空格填充,直到达到start

static public String mergeStrings(String a, String b) { 
    return mergeStrings(a, b, 0); 
} 

static public String mergeStrings(String a, String b, int start) { 
    if (a == null) a = ""; 
    if (b == null) b = ""; 

    int len = Math.max(start - a.length(), 0) + a.length() + b.length(); 
    char[] chars = new char[len]; 
    int index = 0, ia = 0, ib = 0; 

    while (ia<a.length() && ia<start) { 
     chars[index++] = a.charAt(ia++); 
    } 
    while (index<start) { 
     chars[index++] = ' '; 
    } 
    while (ia<a.length() && ib<b.length()) { 
     chars[index++] = a.charAt(ia++); 
     chars[index++] = b.charAt(ib++); 
    } 
    while (ia<a.length()) { 
     chars[index++] = a.charAt(ia++); 
    } 
    while (ib<b.length()) { 
     chars[index++] = b.charAt(ib++); 
    } 

    return new String(chars); 
} 

输出:

String 1 : hello 
String 2 : world 
Combined string is : hweolrllod 
Combined merged at 2 : helwloorld 
Combined merged at 4 : helloworld 
Combined merged at 10 : hello  world 
+0

对于预先确定的大小和就地建立+1)我的代码示例更侧重于演示方法(以及理智检查):P – mohaps 2011-03-06 02:49:52

相关问题