Warum denkst du, dass es einen besseren Weg gibt? Und nenn mich nicht Shirley. :)
Luftkissenfahrzeug voller Aale
Weil ich immer assoziiere, neue Variablen wie die oben genannten zu erstellen, um zur Laufzeit einen leichten Overhead zu haben. Wenn ich zum Beispiel die obige Zeile setze, um ein char-Array in einen String in eine for-Schleife umzuwandeln, sieht es für mich nicht ganz richtig aus. Und ja, ich bin ein bisschen ein Perfektionist. . .
Chutsu
1
Wenn Sie viele dieser Leute haben, sagen wir ein Array oder eine Sammlung von char [], dann würden Sie die char-Arrays vielleicht an einen StringBuffer anhängen, aber für einen String hier oder da ist das, was Sie gepostet haben, das, was Sie am meisten verwenden.
Luftkissenfahrzeug voller Aale
Wenn Sie nach einer Möglichkeit suchen, das Kopieren des Zeichens [] zu vermeiden, gibt es keine. Andernfalls könnten Sie die Unveränderlichkeit von String untergraben.
Paul Cager
13
"Neue Variablen erstellen" verursacht keinen Overhead. Eine Variable ist ein Name, der verwendet wird, um auf einen Wert zu verweisen, und der Name selbst ist zur Laufzeit nirgendwo im Speicher vorhanden (zumindest nicht in einer Sprache wie Java, in der die Reflexion ziemlich begrenzt ist). Der "Overhead" ergibt sich aus der Erstellung eines neuen Werts , und daran führt in Ihrem Fall kein Weg vorbei, wenn man bedenkt, dass Ihr Problem darin besteht, "diesen Wert zu erstellen". Sie können nicht bewirken, dass das char-Array auf magische Weise in einen String umgewandelt wird. Sie können dafür sorgen, dass das ursprüngliche char-Array nach dem Erstellen des Strings mit Müll gesammelt wird.
Karl Knechtel
Antworten:
212
Nein, diese Lösung ist absolut korrekt und sehr minimal.
Beachten Sie jedoch, dass dies eine sehr ungewöhnliche Situation ist: Da Stringspeziell in Java gehandhabt wird, ist sogar "foo"tatsächlich eineString . Daher charist es im normalen Code nicht erforderlich , einen String in einzelne s aufzuteilen und wieder zusammenzufügen.
Vergleichen Sie dies mit C / C ++, wo "foo"Sie ein Bündel von chars haben, das auf der einen und stringder anderen Seite durch ein Null-Byte abgeschlossen ist, und viele Konvertierungen zwischen ihnen aufgrund älterer Methoden.
Beide Methoden rufen String(char[])oder eine Variante davon auf. Und der Kopierteil ist innen erledigt String(char[]). Dies lässt neben der Symmetrie mit den anderen valueOfMethoden keinen Vorteil für einen direkten Aufruf .
AH
1
statisch und mehr OOP ist ein Widerspruch zu Begriffen. Alles, was als statisch deklariert wird, ist kein Teil eines Objekts oder seines Verhaltens und daher nicht objektorientiert. Abgesehen davon - wenn die Möglichkeit besteht, dass die Implementierung von Stringinkompatibel geändert und / oder erweitert wird oder mehrere konkurrierende Implementierungen zur Laufzeit ausgewählt werden können, ist eine statische Factory-Methode sinnvoll. Dies wird bei so niedrigen Levels wie nicht passieren String. Daher gehe ich davon aus: Verwenden Sie den kleinsten geeigneten Hammer, nicht den größten verfügbaren.
AH
@AH Das weiß ich nicht. String machte StringBuffer Platz, was StringBuilder Platz machte. Ich wette, die Befürworter von StringBuffer haben damals dasselbe gesagt und müssen jetzt den Code umgestalten, um StringBuilder verwenden zu können.
CorsiKa
1
@AH Die Tatsache, dass sie die CharSequenceBenutzeroberfläche erstellen mussten, zeigt, wie fehlerhaft Ihr "nicht mit Low-Level-Sachen wie String" passiert - sie ändern nicht, was in String passiert, weil sie sich früh daran gebunden haben, und jetzt wünschen sie es das hätten sie nicht.
CorsiKa
1
@corsiKa Ich habe nicht gesagt, dass die String-API alle gut und golden ist. Nur, dass es sich nicht inkompatibel ändert und dass die Klasse selbst und ihre Konstruktoren nirgendwo hingehen. :-)
AH
37
Dadurch wird das char-Array wieder in einen String konvertiert:
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]);}}}}
Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
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
Konvertieren eines bestimmten Array-Typs in einen String mithilfe der Java 8 Stream-Funktion
Versuchen Sie zu verwenden java.util.Arrays. Dieses Modul verfügt über eine Reihe nützlicher Methoden, die im Zusammenhang mit Arrays verwendet werden können.
Dies ist falsch, da davon ausgegangen wird, dass dies toStringordnungsgemäß funktioniert char[]. Es funktioniert möglicherweise bei bestimmten Anbietern und Versionen der JVM.
Fommil
3
Da die String-Klasse unveränderlich ist, werden zwei Operationen ausgeführt: toString () -Aufruf aund Erstellung eines anderen String-Objekts, das mit a.toString()und""
Antworten:
Nein, diese Lösung ist absolut korrekt und sehr minimal.
Beachten Sie jedoch, dass dies eine sehr ungewöhnliche Situation ist: Da
String
speziell in Java gehandhabt wird, ist sogar"foo"
tatsächlich eineString
. Daherchar
ist es im normalen Code nicht erforderlich , einen String in einzelne s aufzuteilen und wieder zusammenzufügen.Vergleichen Sie dies mit C / C ++, wo
"foo"
Sie ein Bündel vonchar
s haben, das auf der einen undstring
der anderen Seite durch ein Null-Byte abgeschlossen ist, und viele Konvertierungen zwischen ihnen aufgrund älterer Methoden.quelle
String text = String.copyValueOf(data);
oder
String text = String.valueOf(data);
ist wohl besser (kapselt den
new String
Anruf).quelle
String(char[])
oder eine Variante davon auf. Und der Kopierteil ist innen erledigtString(char[])
. Dies lässt neben der Symmetrie mit den anderenvalueOf
Methoden keinen Vorteil für einen direkten Aufruf .String
inkompatibel geändert und / oder erweitert wird oder mehrere konkurrierende Implementierungen zur Laufzeit ausgewählt werden können, ist eine statische Factory-Methode sinnvoll. Dies wird bei so niedrigen Levels wie nicht passierenString
. Daher gehe ich davon aus: Verwenden Sie den kleinsten geeigneten Hammer, nicht den größten verfügbaren.CharSequence
Benutzeroberfläche erstellen mussten, zeigt, wie fehlerhaft Ihr "nicht mit Low-Level-Sachen wie String" passiert - sie ändern nicht, was in String passiert, weil sie sich früh daran gebunden haben, und jetzt wünschen sie es das hätten sie nicht.Dadurch wird das char-Array wieder in einen String konvertiert:
quelle
Um das Zeichenarray in einen String umzuwandeln, gibt es zwei Möglichkeiten.
Gibt die Zeichenfolge zurück
[w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v]
.Und:
Gibt die Zeichenfolge zurück
wwwwww3333dfevvv
.Zusammenfassend : Achten Sie darauf
Arrays.toString(c)
, denn Sie erhalten"[w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v]"
statt"wwwwww3333dfevvv"
.quelle
Ein String in Java ist lediglich ein Objekt um ein Array von Zeichen. Daher a
ist identisch mit einem String ohne Box mit denselben Zeichen. Durch Erstellen eines neuen Strings aus Ihrem Zeichenfeld
Sie weisen den Compiler im Wesentlichen an, ein String-Objekt um Ihr Zeichenarray herum automatisch zu boxen.
quelle
Sie können
String.valueOf
Methode verwenden.Zum Beispiel,
Weitere Informationen zu char array to string finden Sie unter den folgenden Links
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html
https://www.flowerbrackets.com/convert-char-array-to-string-java/
quelle
quelle
Konvertieren eines bestimmten Array-Typs in einen String mithilfe der Java 8 Stream-Funktion
quelle
Versuchen Sie zu verwenden
java.util.Arrays
. Dieses Modul verfügt über eine Reihe nützlicher Methoden, die im Zusammenhang mit Arrays verwendet werden können.quelle
Versuche dies
quelle
Verwenden Sie einfach String.value wie unten;
quelle
Versuche dies:
quelle
Sie können auch die StringBuilder-Klasse verwenden
Die Verwendung von String oder StringBuilder hängt von Ihren Methodenanforderungen ab.
quelle
Ein alternativer Weg ist:
quelle
toString
ordnungsgemäß funktioniertchar[]
. Es funktioniert möglicherweise bei bestimmten Anbietern und Versionen der JVM.a
und Erstellung eines anderen String-Objekts, das mita.toString()
und""