424
votes

I have a char array:

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

My current solution is to do

String b = new String(a);

But surely there is a better way of doing this?

15
Why do think that there is a better way? And don't call me Shirley. :)Hovercraft Full Of Eels
Because I always associate making new variables such as the above to have a slight over head during runtime. Like if I put the above line to convert a char array to a string into a for loop for example, to me it doesn't quite look right. And yes I'm a bit of a perfectionist. . .chutsu
If you have a lot of these guys, say an array or collection of char[], then perhaps you would append the char arrays to a StringBuffer, but for a String here or there, what you've posted is what most use.Hovercraft Full Of Eels
If you are looking for a way to avoid copying the char[] then there isn't one. Otherwise you could subvert String's immutability.Paul Cager
"making new variables" incurs zero overhead. A variable is a name used to refer to a value, and the name itself isn't present anywhere in memory at runtime (at least, not in a language like Java where reflection is fairly limited). The "overhead" comes from constructing a new value, and there is no way around that in your case, considering that your problem is "construct this value". You cannot cause the char array to magically transmogrify into a String. You can arrange for the original char array to be garbage-collected after the String is created.Karl Knechtel

15 Answers

219
votes

No, that solution is absolutely correct and very minimal.

Note however, that this is a very unusual situation: Because String is handled specially in Java, even "foo" is actually a String. So the need for splitting a String into individual chars and join them back is not required in normal code.

Compare this to C/C++ where "foo" you have a bundle of chars terminated by a zero byte on one side and string on the other side and many conversions between them due do legacy methods.

150
votes

String text = String.copyValueOf(data);

or

String text = String.valueOf(data);

is arguably better (encapsulates the new String call).

38
votes

This will convert char array back to string:

char[] charArray = {'a', 'b', 'c'};
String str = String.valueOf(charArray);
19
votes
String str = "wwwwww3333dfevvv";
char[] c = str.toCharArray();

Now to convert character array into String , there are two ways.

Arrays.toString(c);

Returns the string [w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v].

And:

String.valueOf(c)

Returns the string wwwwww3333dfevvv.

In Summary: pay attention to Arrays.toString(c), because you'll get "[w, w, w, w, w, w, 3, 3, 3, 3, d, f, e, v, v, v]" instead of "wwwwww3333dfevvv".

8
votes

A String in java is merely an object around an array of chars. Hence a

char[]

is identical to an unboxed String with the same characters. By creating a new String from your array of characters

new String(char[])

you are essentially telling the compiler to autobox a String object around your array of characters.

3
votes

You can use String.valueOf method.

For example,

char[] a = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'};
String b = String.valueOf(a);
System.out.println("Char Array back to String is: " + b);

For more on char array to string you can refer links below

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html

https://www.flowerbrackets.com/convert-char-array-to-string-java/

2
votes
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]);
            }       }
    }
}
1
votes
 //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

Converting any given Array type to String using Java 8 Stream function

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

Just use String.value of like below;

  private static void h() {

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

        char [] charArr = helloWorld.toCharArray();

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

Try to use java.util.Arrays. This module has a variety of useful methods that could be used related to Arrays.

Arrays.toString(your_array_here[]);
-1
votes

Try this

Arrays.toString(array)
-1
votes
String output = new String(charArray);

Where charArray is the character array and output is your character array converted to the string.

-3
votes

Try this:

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
votes

You can also use StringBuilder class

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

Use of String or StringBuilder varies with your method requirements.

-12
votes

1 alternate way is to do:

String b = a + "";