Преобразовываем строку "символ" массива в Java
Я хочу, чтобы преобразовать 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
(вам нужно бросить, чтобы на самом деле сказать, что это действительно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.Ио. Одна из его функций 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