Преобразование строки в массив «символов» в Java


109

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

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


6
Что вы имеете в виду под «не соответствует массиву символов»?
— barsju

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

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

java нужна функция карты, лямбда-выражения.
— Эрик Хартфорд

Ответы:


186

Использовать это:

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

27
Я хочу, чтобы ArrayUtils был стандартным для JVM!
— Элвин

4
ArrayUtilsэто из commons-lang, а не из JDK, верно?
— Эрик Ван

66

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

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

34

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

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

Будет создано слишком много объектов символов, если это огромная строка.
— realPK

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

1
@HoldOffHunger Вы абсолютно правы. Однако toCharArray () возвращает примитивный тип массива вместо объекта Character по мере необходимости OP. Конечно, вы можете снова просмотреть char [], чтобы преобразовать его в Character []. Но перебирать строковое объявление, создавая объект Character, настолько просто, что я не понимаю, почему бы просто не свернуть свой собственный, если вы не хотите использовать стороннюю библиотеку.
— Элвин

6

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

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

4
Это совсем не то, о чем просил OP.
— Qix - МОНИКА БЫЛА ОФИЦИАЛЬНО

3

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


2

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


2

Этот метод принимает 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;
}

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

1

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

   //Givent String
   String given = "asdcbsdcagfsdbgdfanfghbsfdab";

   //Converting String to Character Array(It's 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]

// ОДИН СПОСОБ: обратное преобразование массива символов в строку

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

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

Character[] charObjectArray =
                           givenString.chars().
                               mapToObj(c -> (char)c).
                               toArray(Character[]::new);

Преобразование массива символов в массив символов

 String givenString = "MyNameIsArpan";
char[] givenchararray = givenString.toCharArray();


     String.valueOf(givenchararray).chars().mapToObj(c -> 
                         (char)c).toArray(Character[]::new);

Преимущества преобразования массива символов в массив символов вы можете использовать функцию Arrays.stream для получения подмассивов

String subStringFromCharacterArray = 

              Arrays.stream(charObjectArray,2,6).
                          map(String::valueOf).
                          collect(Collectors.joining());

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

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

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.