Pourquoi pensez-vous qu'il existe une meilleure façon? Et ne m'appelez pas Shirley. :)
Hovercraft Full Of Eels
Parce que j'associe toujours la création de nouvelles variables comme celles ci-dessus pour avoir une légère surcharge pendant l'exécution. Comme si je mettais la ligne ci-dessus pour convertir un tableau de caractères en une chaîne en une boucle for par exemple, pour moi, cela ne semble pas tout à fait correct. Et oui, je suis un peu perfectionniste. . .
chutsu
1
Si vous avez beaucoup de ces types, disons un tableau ou une collection de char [], alors peut-être que vous ajouteriez les tableaux de char à un StringBuffer, mais pour une chaîne ici ou là, ce que vous avez publié est ce qui est le plus utilisé.
Aéroglisseur plein d'anguilles
Si vous cherchez un moyen d'éviter de copier le caractère [], il n'y en a pas. Sinon, vous pourriez renverser l'immuabilité de String.
Paul Cager
13
«créer de nouvelles variables» n'entraîne aucun frais généraux. Une variable est un nom utilisé pour faire référence à une valeur, et le nom lui-même n'est présent nulle part en mémoire au moment de l'exécution (du moins, pas dans un langage comme Java où la réflexion est assez limitée). La «surcharge» vient de la construction d'une nouvelle valeur , et il n'y a aucun moyen de contourner cela dans votre cas, étant donné que votre problème est de «construire cette valeur». Vous ne pouvez pas provoquer la transmogrification magique du tableau de caractères en une chaîne. Vous pouvez faire en sorte que le tableau de caractères d'origine soit récupéré après la création de la chaîne.
Karl Knechtel
Réponses:
212
Non, cette solution est absolument correcte et très minime.
Notez cependant qu'il s'agit d'une situation très inhabituelle: étant donné qu'il Stringest géré spécialement en Java, même "foo"est en fait un String. Ainsi, la nécessité de diviser une chaîne en chars individuels et de les rejoindre n'est pas requise dans le code normal.
Comparez cela à C / C ++ où "foo"vous avez un paquet de chars terminé par un octet zéro d'un côté et stringde l'autre côté et de nombreuses conversions entre elles dues aux méthodes héritées.
Les deux méthodes appellent String(char[])ou une variante de cela. Et la copie se fait à l'intérieur String(char[]). Cela ne laisse aucun avantage à un appel direct en plus de la symétrie avec les autres valueOfméthodes.
AH
1
statique et plus POO est une contradiction de termes. Tout ce qui est déclaré statique ne fait pas partie d'un objet ou de son comportement et n'est donc pas orienté objet. En plus de cela - s'il y a une chance que l'implémentation de Stringsoit modifiée et / ou améliorée de manière incompatible ou que plusieurs implémentations concurrentes puissent être choisies au moment de l'exécution, alors une méthode d'usine statique est logique. Cela ne se produira pas avec une chose de si bas niveau String. Par conséquent, ma prémisse est la suivante: utilisez le plus petit marteau approprié, pas le plus grand disponible.
AH
@AH, je n'en sais rien. String a cédé la place à StringBuffer qui a cédé la place à StringBuilder. Je parie que les partisans de StringBuffer ont dit la même chose à l'époque, et doivent maintenant refactoriser le code pour utiliser StringBuilder.
corsiKa
1
@AH Le fait qu'ils aient dû créer l' CharSequenceinterface montre à quel point votre "ne se produira pas avec des trucs de bas niveau comme la chaîne" - ils ne changent pas ce qui se passe dans la chaîne parce qu'ils s'y sont liés tôt, et maintenant ils souhaitent ils n'auraient pas.
corsiKa
1
@corsiKa Je n'ai pas dit que l'API String est bonne et dorée. Seulement cela ne changera pas de manière incompatible et que la classe elle-même et ses constructeurs n'iront nulle part. :-)
AH
37
Cela convertira le tableau de caractères en chaîne:
package naresh.java;publicclassTestDoubleString{publicstaticvoid main(String args[]){String str="abbcccddef";char charArray[]=str.toCharArray();int len=charArray.length;for(int i=0;i<len;i++){//if i th one and i+1 th character are same then update the charArraytry{if(charArray[i]==charArray[i+1]){
charArray[i]='0';}}catch(Exception e){System.out.println("Exception");}}//finally printing final character stringfor(int k=0;k<charArray.length;k++){if(charArray[k]!='0'){System.out.println(charArray[k]);}}}}
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant pourquoi et / ou comment ce code répond à la question améliore sa valeur à long terme.
baikho
1
//Given Character Array char[] a ={'h','e','l','l','o',' ','w','o','r','l','d'};//Converting Character Array to String using String funtion System.out.println(String.valueOf(a));//OUTPUT : hello world
Conversion d'un type de tableau donné en chaîne à l'aide de la fonction Java 8 Stream
c'est faux car cela suppose que cela toStringfonctionne correctement char[]. Il peut fonctionner sur certains fournisseurs et versions spécifiques de la machine virtuelle Java.
fommil
3
Étant donné que la classe String est immuable, cela entraînera l'exécution de deux opérations: l'appel toString () aet la création d'un autre objet String qui concatène avec a.toString()et""
Réponses:
Non, cette solution est absolument correcte et très minime.
Notez cependant qu'il s'agit d'une situation très inhabituelle: étant donné qu'il
String
est géré spécialement en Java, même"foo"
est en fait unString
. Ainsi, la nécessité de diviser une chaîne enchar
s individuels et de les rejoindre n'est pas requise dans le code normal.Comparez cela à C / C ++ où
"foo"
vous avez un paquet dechar
s terminé par un octet zéro d'un côté etstring
de l'autre côté et de nombreuses conversions entre elles dues aux méthodes héritées.la source
String text = String.copyValueOf(data);
ou
String text = String.valueOf(data);
est sans doute mieux (encapsule l'
new String
appel).la source
String(char[])
ou une variante de cela. Et la copie se fait à l'intérieurString(char[])
. Cela ne laisse aucun avantage à un appel direct en plus de la symétrie avec les autresvalueOf
méthodes.String
soit modifiée et / ou améliorée de manière incompatible ou que plusieurs implémentations concurrentes puissent être choisies au moment de l'exécution, alors une méthode d'usine statique est logique. Cela ne se produira pas avec une chose de si bas niveauString
. Par conséquent, ma prémisse est la suivante: utilisez le plus petit marteau approprié, pas le plus grand disponible.CharSequence
interface montre à quel point votre "ne se produira pas avec des trucs de bas niveau comme la chaîne" - ils ne changent pas ce qui se passe dans la chaîne parce qu'ils s'y sont liés tôt, et maintenant ils souhaitent ils n'auraient pas.Cela convertira le tableau de caractères en chaîne:
la source
Maintenant, pour convertir un tableau de caractères en chaîne, il y a deux façons.
Renvoie la chaîne
[w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v]
.Et:
Renvoie la chaîne
wwwwww3333dfevvv
.En résumé : faites attention
Arrays.toString(c)
, car vous obtiendrez"[w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v]"
au lieu de"wwwwww3333dfevvv"
.la source
Une chaîne en java n'est qu'un objet autour d'un tableau de caractères. D'où un
est identique à une chaîne non encadrée avec les mêmes caractères. En créant une nouvelle chaîne à partir de votre tableau de caractères
vous dites essentiellement au compilateur d'autoboxer un objet String autour de votre tableau de caractères.
la source
Vous pouvez utiliser la
String.valueOf
méthode.Par exemple,
Pour plus d'informations sur le tableau de caractères à chaîne, vous pouvez consulter les liens ci-dessous
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html
https://www.flowerbrackets.com/convert-char-array-to-string-java/
la source
la source
Conversion d'un type de tableau donné en chaîne à l'aide de la fonction Java 8 Stream
la source
Essayez d'utiliser
java.util.Arrays
. Ce module a une variété de méthodes utiles qui pourraient être utilisées concernant les tableaux.la source
Essaye ça
la source
Utilisez simplement String.value comme ci-dessous;
la source
Essaye ça:
la source
Vous pouvez également utiliser la classe StringBuilder
L'utilisation de String ou StringBuilder varie selon les exigences de votre méthode.
la source
Une autre façon est de faire:
la source
toString
fonctionne correctementchar[]
. Il peut fonctionner sur certains fournisseurs et versions spécifiques de la machine virtuelle Java.a
et la création d'un autre objet String qui concatène aveca.toString()
et""