Come riconvertire un array di caratteri in una stringa?


405

Ho un array di caratteri:

char[] a = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'};

La mia soluzione attuale è fare

String b = new String(a);

Ma sicuramente c'è un modo migliore per farlo?


151
Perché pensi che esista un modo migliore? E non chiamarmi Shirley. :)
Hovercraft Full Of Eels

Perché associo sempre la creazione di nuove variabili come quelle sopra ad avere un leggero sovraccarico durante il runtime. Ad esempio, se metto la riga sopra per convertire un array di caratteri in una stringa in un ciclo for, ad esempio, per me non sembra del tutto giusto. E sì, sono un po 'perfezionista. . .
Chutsu,

1
Se avete molti di questi ragazzi, diciamo un array o una raccolta di char [], allora forse dovreste aggiungere gli array di caratteri a uno StringBuffer, ma per uno String qua o là, quello che avete pubblicato è quello che più usano.
Hovercraft Full Of Eels,

Se stai cercando un modo per evitare di copiare il carattere [], non ce n'è uno. Altrimenti potresti sovvertire l'immutabilità di String.
Paul Cager,

13
"la creazione di nuove variabili" comporta un sovraccarico pari a zero. Una variabile è un nome utilizzato per fare riferimento a un valore e il nome stesso non è presente in alcun punto della memoria in fase di esecuzione (almeno, non in un linguaggio come Java in cui la riflessione è piuttosto limitata). Il "sovraccarico" deriva dalla costruzione di un nuovo valore , e non c'è modo di evitarlo nel tuo caso, considerando che il tuo problema è "costruire questo valore". Non è possibile causare la trasformazione magica dell'array di caratteri in una stringa. È possibile disporre che l'array di caratteri originale venga garbage collection dopo la creazione della stringa.
Karl Knechtel,

Risposte:


212

No, quella soluzione è assolutamente corretta e molto minimale.

Si noti tuttavia che questa è una situazione molto insolita: poiché Stringè gestita appositamente in Java, anche in "foo"realtà è una String. Pertanto, la necessità di dividere una stringa in singoli chare di ricollegarli non è richiesta nel codice normale.

Confronta questo con C / C ++ dove "foo"hai un fascio di chars terminato da un byte zero su un lato e stringsull'altro lato e molte conversioni tra loro dovute fanno metodi legacy.


146

String text = String.copyValueOf(data);

o

String text = String.valueOf(data);

è probabilmente migliore (incapsula la new Stringchiamata).


6
Entrambi i metodi chiamano String(char[])o una variante di questo. E la parte della copia viene eseguita all'interno String(char[]). Ciò non lascia alcun vantaggio a una chiamata diretta oltre alla simmetria con gli altri valueOfmetodi.
AH,

1
statico e più OOP è una contraddizione di termini. Qualunque cosa dichiarata statica non fa parte di un oggetto o del suo comportamento e quindi non è orientata agli oggetti. Oltre a ciò - se ci fosse la possibilità che l'implementazione di Stringfosse modificata e / o migliorata in modo incompatibile o che fosse possibile scegliere diverse implementazioni concorrenti in fase di esecuzione, allora un metodo statico di fabbrica ha senso. Questo non accadrà con una cosa di basso livello come String. Pertanto la mia premessa è: utilizzare il martello più piccolo adatto, non quello più grande disponibile.
AH,

@AH Non lo so. String ha lasciato il posto a StringBuffer che ha lasciato il posto a StringBuilder. Scommetto che i sostenitori di StringBuffer hanno detto la stessa cosa allora, e ora devo refactificare il codice per usare StringBuilder.
corsiKa

1
@AH Il fatto che abbiano dovuto creare l' CharSequenceinterfaccia mostra quanto sia imperfetto il tuo "non succederà con cose di basso livello come la stringa" è - non cambiano ciò che accade nella stringa perché si sono legati presto ad essa, e ora desiderano non avrebbero.
corsiKa

1
@corsiKa Non ho detto, che l'API String è tutto buono e dorato. Solo che non cambierà in modo incompatibile e che la classe stessa e i suoi costruttori non andranno da nessuna parte. :-)
AH

37

Questo convertirà nuovamente l'array di caratteri in stringa:

char[] charArray = {'a', 'b', 'c'};
String str = String.valueOf(charArray);

14
String str = "wwwwww3333dfevvv";
char[] c = str.toCharArray();

Ora per convertire l'array di caratteri in String, ci sono due modi.

Arrays.toString(c);

Restituisce la stringa [w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v].

E:

String.valueOf(c)

Restituisce la stringa wwwwww3333dfevvv.

In sintesi : presta attenzione Arrays.toString(c), perché otterrai "[w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v]"invece di "wwwwww3333dfevvv".


7

Una stringa in Java è semplicemente un oggetto attorno a una matrice di caratteri. Quindi a

char[]

è identico a una stringa senza scatola con gli stessi caratteri. Creando una nuova stringa dal tuo array di caratteri

new String(char[])

stai essenzialmente dicendo al compilatore di boxare automaticamente un oggetto String attorno alla tua matrice di caratteri.



2
package naresh.java;

public class TestDoubleString {

    public static void 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 charArray
            try{
                if(charArray[i]==charArray[i+1]){
                    charArray[i]='0';                   
                }}
                catch(Exception e){
                    System.out.println("Exception");
                }
        }//finally printing final character string
        for(int k=0;k<charArray.length;k++){
            if(charArray[k]!='0'){
                System.out.println(charArray[k]);
            }       }
    }
}

Mentre questo codice può rispondere alla domanda, fornendo un contesto aggiuntivo riguardo al perché e / o al modo in cui questo codice risponde alla domanda migliora il suo valore a lungo termine.
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

Conversione di un determinato tipo di array in String utilizzando la funzione Stream di Java 8

String stringValue = 
Arrays.stream(new char[][]{a}).map(String::valueOf).collect(Collectors.joining());

1

Prova ad usare java.util.Arrays. Questo modulo ha una varietà di metodi utili che potrebbero essere utilizzati in relazione agli array.

Arrays.toString(your_array_here[]);


0

Usa String.value come di seguito;

  private static void h() {

        String helloWorld = "helloWorld";
        System.out.println(helloWorld);

        char [] charArr = helloWorld.toCharArray();

        System.out.println(String.valueOf(charArr));
    }

-3

Prova questo:

CharSequence[] charArray = {"a","b","c"};

for (int i = 0; i < charArray.length; i++){
    String str = charArray.toString().join("", charArray[i]);
    System.out.print(str);
}

-4

Puoi anche usare la classe StringBuilder

String b = new StringBuilder(a).toString();

L'uso di String o StringBuilder varia in base ai requisiti del metodo.


Perché però? Cosa ottieni dal fare questo?
Casey,

-12

1 modo alternativo è di fare:

String b = a + "";

3
questo è sbagliato in quanto presuppone che funzioni toStringcorrettamentechar[] . Potrebbe funzionare su alcuni fornitori e versioni specifici di JVM.
fommil,

3
Poiché la classe String è immutabile, ciò comporterà l'esecuzione di due operazioni: toString () chiama ae crea un altro oggetto String che si concatena con a.toString()e""
Alpay
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.