2010-12-12 18 views
2

Je me demandais s'il était possible de mixer deux chaînes en Java. Supposons que jeMixer deux chaînes en Java

11111 

et

22222 

Quelle serait la meilleure façon de les combiner pour former?

1212121212 
+0

Cela ne se rapporte pas à regex, alors j'ai enlevé l'étiquette. – casablanca

+4

S'il s'agit de devoirs, merci de le marquer comme tel –

+0

-1 (Aucune approche/tentative de devoirs existante.) –

Répondre

4

En supposant à la fois les chaînes sont de la même longueur, vous pouvez simplement écrire une boucle pour passer en revue les caractères et faire ce que vous voulez:

String s1, s2; /* input strings */ 

StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < s1.length(); i++) { 
    sb.append(s1.charAt(i)); 
    sb.append(s2.charAt(i)); 
} 

String result = sb.toString(); 
1

Oui - itérer la première chaîne, et pour chaque caractère dans ce, append à un constructeur du caractère dans la même position de la deuxième chaîne (si elle existe):

StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < str1.length(); i++) { 
    sb.append(str1.charAt(i)); 
    if (str.length() > i) { 
     sb.append(str2.charAt(i)); 
    } 
} 
return sb.toString(); 
1

Je me demande si l'exemple donné est intentionnel, à savoir qu'ils ont tous 1 caractère répété. Dans ce cas, c'est beaucoup plus simple. Si ce n'est pas le cas, les autres réponses sont bonnes.

+0

Non, cela devrait fonctionner quand une chaîne de la même longueur, et cela ne devrait pas poser de problème si les caractères sont répétés ou non . –

1

est ici une implémentation qui conserve le reste des chaînes de longueur inégale:

public static String mix(String a, String b) { 
    final int aLength = a.length(); 
    final int bLength = b.length(); 
    final int min = Math.min(aLength, bLength); 
    final StringBuilder sb = new StringBuilder(aLength + bLength); 
    for(int i = 0; i < min; i++) { 
     sb.append(a.charAt(i)); 
     sb.append(b.charAt(i)); 
    } 
    if (aLength > bLength) { 
     sb.append(a, bLength, aLength); 
    } else if (aLength < bLength) { 
     sb.append(b, aLength, bLength); 
    } 
    return sb.toString(); 
}