Преобразовываем строку "символ" массива в Java
Я хочу конвертировать a String
к массиву объектов символ класс, но я не могу выполнить преобразование. Я знаю, что могу преобразовать строку в массив примитивного типа данных типа "char" с помощью toCharArray()
метод, но это не помогает в преобразовании строки в массив объектов символ тип.
Как бы я это сделал?
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
(вам нужно бросить, чтобы на самом деле сказать, что его действительно achar
, а затем 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