Преобразовываем строку "символ" массива в Java


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

Как бы я это сделал?

12 94

12 ответов:

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

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

один лайнер с 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 (вам нужно бросить, чтобы на самом деле сказать, что его действительно a char, а затем Java будет автоматически вставлять его в Character)
  • получить результирующий массив, вызвав toArray()

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

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++) {
      array[i] = new Character(s.charAt(i));
   }

   return array;
}

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

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

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

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

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

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

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

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

Если вы работаете с 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]);

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

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

Если вы не хотите полагаться на сторонние 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;
}

я использовал 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