2008-11-30 11 views
26

Comment concaténer des caractères dans java? La concaténation des chaînes ne nécessite qu'un + entre les chaînes, mais la concaténation des caractères à l'aide de + va changer la valeur du caractère en ascii et donner ainsi une sortie numérique. Je veux faire System.out.println(char1+char2+char3... et créer un mot de chaîne comme ceci.Comment concaténer des caractères dans Java?

que je pouvais faire

System.out.print(char1); 
System.out.print(char2); 
System.out.print(char3); 

Mais, cela ne me obtenir les caractères en 1 ligne. J'en ai besoin comme d'une ficelle. Toute aide serait appréciée.

Merci

Répondre

48

Est-ce que vous voulez faire une chaîne d'eux?

String s = new StringBuilder().append(char1).append(char2).append(char3).toString(); 

Notez que

String b = "b"; 
String s = "a" + b + "c"; 

fait à compile

String s = new StringBuilder("a").append(b).append("c").toString(); 

Modifier: comme litb a souligné, vous pouvez aussi le faire:

"" + char1 + char2 + char3; 

T chapeau compile les éléments suivants:

new StringBuilder().append("").append(c).append(c1).append(c2).toString(); 

Edit (2): string append corrigée comparaison puisque, comme le souligne cletus, une série de chaînes est géré par le compilateur.

Le but de ce qui précède est d'illustrer ce que fait le compilateur, pas de vous dire ce que vous devriez faire.

+0

il vous manque un toString() à la fin de la première ligne de code. – akuhn

+0

Vous avez tort. "a" + "b" + "c" devient "abc" à la compilation. Son seulement évalué à l'exécution si au moins un de ces opérandes ne peut pas être déterminé au moment de la compilation. – cletus

+0

@Adrian merci - fixe – Dustin

1

Vous avez besoin d'un objet String de quelque description pour contenir votre tableau de caractères concaténés, puisque le type char ne contiendra qu'un seul caractère. par exemple,

StringBuilder sb = new StringBuilder('a').append('b').append('c'); 
System.out.println(sb.toString); 
+0

Désolé mais pour les constantes c'est un mauvais conseil. Le compilateur optimise "" + 'a' + 'b' au moment de la compilation mais ne peut pas optimiser votre version, c'est donc une expression d'exécution. Si vous avez affaire à des caractères variables, cette approche peut être utile. – cletus

4

Vous devez dire au compilateur que vous voulez faire concaténation chaîne en démarrant la séquence avec une chaîne, même un vide. Comme si:

System.out.println("" + char1 + char2 + char3...); 
7

Si vous avez un tas de caractères et que vous voulez les concaténer dans une chaîne, pourquoi ne pas faire

System.out.println("" + char1 + char2 + char3); 

?

22

Je n'allais pas répondre à cette question, mais il y a deux réponses ici (qui ont été votées!) Qui sont carrément fausses. Tenez compte de ces expressions:

String a = "a" + "b" + "c"; 
String b = System.getProperty("blah") + "b"; 

La première est évaluée à compilation. La deuxième est évaluée à l'exécution.

Donc jamais remplacez concaténations constantes (de tout type) avec StringBuilder, StringBuffer ou similaire. Utilisez uniquement celles où les variables sont invovées et généralement uniquement lorsque vous ajoutez beaucoup d'opérandes ou que vous ajoutez une boucle.

Si les caractères sont constants, cela est bien:

String s = "" + 'a' + 'b' + 'c'; 

Si toutefois ils ne sont pas, considérez ceci:

String concat(char... chars) { 
    if (chars.length == 0) { 
    return ""; 
    } 
    StringBuilder s = new StringBuilder(chars.length); 
    for (char c : chars) { 
    s.append(c); 
    } 
    return s.toString(); 
} 

comme une solution appropriée.

Cependant certains pourraient être tentés d'optimiser:

String s = "Name: '" + name + "'"; // String name; 

dans ce:

String s = new StringBuilder().append("Name: ").append(name).append("'").toString(); 

Bien que ce soit bien intentionné, la ligne de fond est NE PAS.

Pourquoi? Comme une autre réponse a correctement souligné: le compilateur fait cela pour vous. Donc en le faisant vous-même, vous n'autorisez pas le compilateur à optimiser le code ou pas en fonction de sa bonne idée, le code est plus difficile à lire et est inutilement compliqué.

Pour une optimisation de bas niveau, le compilateur est meilleur que vous pour optimiser le code.

Laissez le compilateur faire son travail. Dans ce cas, le pire des cas est que le compilateur change implicitement votre code pour exactement ce que vous avez écrit. La concaténation de 2-3 Strings peut s'avérer plus efficace que la construction d'un StringBuilder, il est donc préférable de le laisser tel quel. Le compilateur sait ce qu'il y a de mieux à cet égard.

+0

en effet vous avez raison. serait un mauvais design et stupide si "a" + "b" créait un stringbuilder. et je suis également d'accord que pour seulement 1-5 concats, le faire avec + est probablement mieux que d'entrer dans les tracas de la création d'un StringBuilder. –

+0

Le compilateur fait cela pour vous, mais oui, dans votre dernier exemple, c'est ce que le compilateur sort. Je suis entièrement d'accord que vous ne devriez pas le faire vous-même, mais je pense qu'il est important de comprendre ce qui se passe. – Dustin

+0

J'ai incorporé vos suggestions dans ma réponse. – Dustin

4

Vous pouvez utiliser le String constructor.

System.out.println(new String(new char[]{a,b,c})); 
+0

Ou java.nio.CharBuffer.wrap (nouveau char [] {a, b, c}). :) –

+0

CharBuffer.wrap ne donne pas String mais CharBuffer, qui implémente CharSequence. –

1

initiales public class {

public static void main (String [] args) { 

    char initialA = 'M'; 
    char initialB = 'P'; 
    char initialC = 'T'; 

    System.out.println("" + initialA + initialB + initialC); 


} 

}

2

System.out.println(char1+""+char2+char3) 

ou

String s = char1+""+char2+char3; 
-2
System.out.print(a + "" + b + "" + c); 
+0

s'il vous plaît corriger votre code en indentant avec quatre espaces, et ajouter une courte explication de la façon dont votre réponse fonctionne. –

0

Je ne me considère pas vraiment comme un programmeur Java, mais je pensais juste que je l'ajouterais ici "pour la complétude"; en utilisant la (C-inspiré) String.format méthode statique:

String s = String.format("%s%s", 'a', 'b'); // s is "ab" 
+0

Et si c'est pour l'impression, 'System.out.format ("% s% s ", 'a', 'b')'. –

-1

exemple simple à caractère sélection de chaîne et annexant à variable chaîne

private static String findaccountnum (String Nom du titulaire mobile String) {

char n1=holdername.charAt(0); 
    char n2=holdername.charAt(1); 
    char n3=holdername.charAt(2); 
    char n4=mobile.charAt(0); 
    char n5=mobile.charAt(1); 
    char n6=mobile.charAt(2); 
    String number=new StringBuilder().append(n1).append(n2).append(n3).append(n4).append(n5).append(n6).toString(); 

    return number; 
} 
Questions connexes