2011-03-06 142 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

相關問題