Преобразование String в массив "Character" в Java

Я хочу преобразовать String в массив объектов класса Character, но я не могу выполнить преобразование. Я знаю, что я могу преобразовать String в массив типа примитивного типа данных < char "с помощью метода toCharArray(), но он не помогает преобразовать String в массив объектов Character.

Как я могу это сделать?

Ответ 1

Используйте это:

String str = "testString";
char[] charArray = str.toCharArray();
Character[] charObjectArray = ArrayUtils.toObject(charArray);

Ответ 2

Один вкладыш с java-8:

String str = "testString";

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

Что он делает:

  • получить IntStream символов (вы также можете посмотреть codePoints())
  • сопоставьте значение каждого символа с Character (вам нужно указать, что на самом деле это char, а затем Java автоматически привяжет его к Character)
  • получить полученный массив, вызвав toArray()

Ответ 3

Почему бы не написать небольшой метод самостоятельно

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
      <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;
}

Ответ 4

Я надеюсь, что код ниже поможет вам.

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]);
}

Работает и выводится:

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

Ответ 5

В этом случае вы должны написать свой собственный метод. Используйте цикл и получите каждый символ с помощью charAt(i) и установите его в массив Character[], используя arrayname[i] = string.charAt[i].

Ответ 6

String#toCharArray возвращает массив char, у вас есть массив Character. В большинстве случаев не имеет значения, используете ли вы char или Character, поскольку есть autoboxing. Проблема в вашем случае состоит в том, что массивы не являются автобоксами, я предлагаю вам использовать массив char (char[]).

Ответ 7

Этот метод принимает String как аргумент и возвращает массив символов

/**
 * @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;
}

Ответ 8

другой способ сделать это.

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]);
    }

Ответ 9

Преобразование строки в массив символов, а затем преобразование массива символов обратно в строку

   //Givent String
   String given = "asdcbsdcagfsdbgdfanfghbsfdab";

   //Converting String to Character Array(It 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: преобразование обратно символьного массива в строку

  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

//Второй путь: преобразование обратно символьного массива в строку

String.valueOf(characterArray);

//Третий путь: преобразование обратно символьного массива в строку

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

Ответ 10

если вы работаете с JTextField, тогда это может быть полезно.

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]);

Ответ 11

цепочка всегда лучше: D

String str = "somethingPutHere";
Character[] c = ArrayUtils.toObject(str.toCharArray());

Ответ 12

Если вы не хотите полагаться на сторонние API, вот рабочий код для JDK7 или ниже. Я не создаю временные объекты символов, как это сделано другими решениями выше. петли foreach более читабельны, посмотрите сами:)

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;
}

Ответ 13

Я использовал класс StringReader в java.io. Один из них функции read(char[] cbuf) считывает содержимое строки в массив.

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]);
}

Запуск этого дает вам результат:

array[0] = h
array[1] = e
array[2] = l
array[3] = l
array[4] = o