2012-04-04 2 views
88

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

Как мне это сделать?

+5

Что вы подразумеваете под «не вписывается в массив символов»? – barsju

+0

Можете ли вы повторить это или сформулировать немного больше или, возможно, представить пример кода? – blackcompe

+0

Чтобы преобразовать 'char' в' Character', используйте 'Character.valueOf (mychar)'. Если это массив, зациклируйте каждый элемент и преобразуйте его. –

ответ

155

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

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

Я хочу, чтобы ArrayUtils был стандартным в JVM! – Alvin

2

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

32

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

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

+1 для символа [] array = new Characer [s.length()]; – Ankit

+0

Слишком много объектов персонажа будут создаваться, если его огромная строка. – realPK

+1

Почему бы не написать немного метода самостоятельно? Поскольку метод уже существует (toCharArray()), и уже существующий метод имеет гораздо больше инженеров, которые хотят и гарантируют производительность и надежность этой функции, чем то, что может быть скопировано/вставлено из сообщения stackoverflow. – HoldOffHunger

2

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

1

другой способ.

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

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

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 
+2

Это совсем не то, о чем просил ОП. – Qix

0

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

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

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

'цепочка всегда лучшая' False. – Qix

+0

ArrayUtils не является частью JDK. – mbmast

2

Этот метод принимает строку в качестве аргумента и возвращать символьный массив

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

Один лайнер с :

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()
0

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

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

Я использовал 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 
Смежные вопросы