135

I want to convert a String to an array of objects of Character class but I am unable to perform the conversion. I know that I can convert a String to an array of primitive datatype type "char" with the toCharArray() method but it doesn't help in converting a String to an array of objects of Character type.

How would I go about doing so?

kgd
  • 1,666
  • 2
  • 11
  • 15

14 Answers14

219

Use this:

String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);
David Newcomb
  • 10,639
  • 3
  • 49
  • 62
Kuldeep Jain
  • 8,409
  • 8
  • 48
  • 73
93

One liner with :

String str = "testString";

//[t, e, s, t, S, t, r, i, n, g]
Character[] charObjectArray = 
    str.chars().mapToObj(c -> (char)c).toArray(Character[]::new); 

What it does is:

  • get an IntStream of the characters (you may want to also look at codePoints())
  • map each 'character' value to Character (you need to cast to actually say that its really a char, and then Java will box it automatically to Character)
  • get the resulting array by calling toArray()
Alexis C.
  • 91,686
  • 21
  • 171
  • 177
34

Why not write a little method yourself

public Character[] toCharacterArray( String s ) {

   if ( s == null ) {
     return null;
   }

   int len = s.length();
   Character[] array = new Character[len];
   for (int i = 0; i < len ; i++) {
      /* 
      Character(char) is deprecated since Java SE 9 & JDK 9
      Link: https://docs.oracle.com/javase/9/docs/api/java/lang/Character.html
      array[i] = new Character(s.charAt(i));
      */
      array[i] = s.charAt(i);
   }

   return array;
}
Aniket
  • 303
  • 5
  • 11
Alvin
  • 10,308
  • 8
  • 37
  • 49
  • Too many Character Objects will be instantiated if its a huge String. – realPK Jun 27 '16 at 08:19
  • 3
    Why not write a little method yourself? Because a method already exists (toCharArray()), and the method that already exists has far more engineers devoted to and interested in guaranteeing the performance and reliability of that function, than what may be copied/pasted from a stackoverflow post. – HoldOffHunger Sep 24 '16 at 23:00
  • 1
    @HoldOffHunger You are absolutely right. However toCharArray() returns primitive type of array instead of Character object as need by OP. Sure, you can loop through the char[] again to convert it to Character[]. But, looping through a string ad creating Character object is so simple I don't see why not just roll your own if you don't want to bring in third party library. – Alvin Sep 26 '16 at 21:38
  • @realPK not if the string consists mostly of ASCII chars since auto-boxing uses Character#valueOf (which caches objects for ASCII). – Flávio Etrusco Oct 02 '20 at 13:08
7

Converting String to Character Array and then Converting Character array back to String

   //Givent String
   String given = "asdcbsdcagfsdbgdfanfghbsfdab";

   //Converting String to Character Array(It's an inbuild method of a String)
   char[] characterArray = given.toCharArray();
   //returns = [a, s, d, c, b, s, d, c, a, g, f, s, d, b, g, d, f, a, n, f, g, h, b, s, f, d, a, b]

//ONE WAY : Converting back Character array to String

  int length = Arrays.toString(characterArray).replaceAll("[, ]","").length();

  //First Way to get the string back
  Arrays.toString(characterArray).replaceAll("[, ]","").substring(1,length-1)
  //returns asdcbsdcagfsdbgdfanfghbsfdab
  or 
  // Second way to get the string back
  Arrays.toString(characterArray).replaceAll("[, ]","").replace("[","").replace("]",""))
 //returns asdcbsdcagfsdbgdfanfghbsfdab

//Second WAY : Converting back Character array to String

String.valueOf(characterArray);

//Third WAY : Converting back Character array to String

Arrays.stream(characterArray)
           .mapToObj(i -> (char)i)
           .collect(Collectors.joining());

Converting string to Character Array

Character[] charObjectArray =
                           givenString.chars().
                               mapToObj(c -> (char)c).
                               toArray(Character[]::new);

Converting char array to Character Array

 String givenString = "MyNameIsArpan";
char[] givenchararray = givenString.toCharArray();


     String.valueOf(givenchararray).chars().mapToObj(c -> 
                         (char)c).toArray(Character[]::new);

benefits of Converting char Array to Character Array you can use the Arrays.stream funtion to get the sub array

String subStringFromCharacterArray = 

              Arrays.stream(charObjectArray,2,6).
                          map(String::valueOf).
                          collect(Collectors.joining());
Arpan Saini
  • 4,623
  • 1
  • 42
  • 50
3

You have to write your own method in this case. Use a loop and get each character using charAt(i) and set it to your Character[] array using arrayname[i] = string.charAt[i].

Gilles 'SO- stop being evil'
  • 104,111
  • 38
  • 209
  • 254
Chandra Sekhar
  • 18,914
  • 16
  • 84
  • 125
3

String#toCharArray returns an array of char, what you have is an array of Character. In most cases it doesn't matter if you use char or Character as there is autoboxing. The problem in your case is that arrays are not autoboxed, I suggest you use an array of char (char[]).

Gilles 'SO- stop being evil'
  • 104,111
  • 38
  • 209
  • 254
Sandro
  • 1,266
  • 2
  • 13
  • 25
3

I hope the code below will help you.

String s="Welcome to Java Programming";
char arr[]=s.toCharArray();
for(int i=0;i<arr.length;i++){
    System.out.println("Data at ["+i+"]="+arr[i]);
}

It's working and the output is:

Data at [0]=W
Data at [1]=e
Data at [2]=l
Data at [3]=c
Data at [4]=o
Data at [5]=m
Data at [6]=e
Data at [7]= 
Data at [8]=t
Data at [9]=o
Data at [10]= 
Data at [11]=J
Data at [12]=a
Data at [13]=v
Data at [14]=a
Data at [15]= 
Data at [16]=P
Data at [17]=r
Data at [18]=o
Data at [19]=g
Data at [20]=r
Data at [21]=a
Data at [22]=m
Data at [23]=m
Data at [24]=i
Data at [25]=n
Data at [26]=g
Gilles 'SO- stop being evil'
  • 104,111
  • 38
  • 209
  • 254
JDGuide
  • 6,239
  • 12
  • 46
  • 64
2

another way to do it.

String str="I am a good boy";
    char[] chars=str.toCharArray();

    Character[] characters=new Character[chars.length];
    for (int i = 0; i < chars.length; i++) {
        characters[i]=chars[i];
        System.out.println(chars[i]);
    }
Balaswamy Vaddeman
  • 8,360
  • 3
  • 30
  • 40
2

This method take String as a argument and return the Character Array

/**
 * @param sourceString
 *            :String as argument
 * @return CharcterArray
 */
public static Character[] toCharacterArray(String sourceString) {
    char[] charArrays = new char[sourceString.length()];
    charArrays = sourceString.toCharArray();
    Character[] characterArray = new Character[charArrays.length];
    for (int i = 0; i < charArrays.length; i++) {
        characterArray[i] = charArrays[i];
    }
    return characterArray;
}
loknath
  • 1,362
  • 16
  • 25
0

if you are working with JTextField then it can be helpfull..

public JTextField display;
String number=e.getActionCommand();

display.setText(display.getText()+number);

ch=number.toCharArray();
for( int i=0; i<ch.length; i++)
    System.out.println("in array a1= "+ch[i]);
0

chaining is always best :D

String str = "somethingPutHere";
Character[] c = ArrayUtils.toObject(str.toCharArray());
ak_2050
  • 159
  • 4
0

If you don't want to rely on third party API's, here is a working code for JDK7 or below. I am not instantiating temporary Character Objects as done by other solutions above. foreach loops are more readable, see yourself :)

public static Character[] convertStringToCharacterArray(String str) {
    if (str == null || str.isEmpty()) {
        return null;
    }
    char[] c = str.toCharArray();
    final int len = c.length;
    int counter = 0;
    final Character[] result = new Character[len];
    while (len > counter) {
        for (char ch : c) {
            result[counter++] = ch;
        }
    }
    return result;
}
realPK
  • 2,630
  • 29
  • 22
0

I used the StringReader class in java.io. One of it's functions read(char[] cbuf) reads a string's contents into an array.

String str = "hello";
char[] array = new char[str.length()];
StringReader read = new StringReader(str);

try {
    read.read(array); //Reads string into the array. Throws IOException
} catch (IOException e) {
    e.printStackTrace();
}

for (int i = 0; i < str.length(); i++) {
        System.out.println("array["+i+"] = "+array[i]);
}

Running this gives you the output:

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o
John K
  • 123
  • 2
  • 10
0

String[] arr = { "abc", "cba", "dac", "cda" };
    Map<Character, Integer> map = new HashMap<>();
    String string = new String();
    for (String a : arr) {
        string = string.concat(a);

    }
    System.out.println(string);

    for (int i = 0; i < string.length(); i++) {
        if (map.containsKey(string.charAt(i))) {
            map.put(string.charAt(i), map.get(string.charAt(i)) + 1);

        } else {
            map.put(string.charAt(i), 1);

        }
    }
    System.out.println(map);

//out put {a=4, b=2, c=4, d=2}