Перетворення рядка в масив "Характер" на Java


108

Я хочу перетворити Stringна масив об'єктів класу символів, але перетворення не в змозі. Я знаю, що я можу перетворити String в масив примітивного типу типу "char" toCharArray()методом, але це не допомагає перетворити String в масив об'єктів типу символів .

Як би мені це зробити?


6
Що ви маєте на увазі під "не відповідає масиву символів"?
barsju

Чи можете ви переробити це слово або сформулювати трохи більше, чи, можливо, навести приклад коду?
blackcompe

Для того, щоб перетворити charв Character, використання Character.valueOf(mychar). Якщо це масив, цикліть кожен елемент і перетворіть.
ее.

java потребує функції карти, лямбда-вирази.
Ерік Хартфорд

Відповіді:


184

Використовуй це:

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

33

Чому б не написати маленький метод самостійно

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 () повертає примітивний тип масиву замість об'єкта символів у міру необхідності ОП. Звичайно, ви можете провести цикл через char [] знову, щоб перетворити його в символ []. Але, переглядаючи рядову рекламу, що створює об'єкт символів, така проста, я не бачу, чому б просто не розгорнути свій власний, якщо ви не хочете занести до бібліотеки сторонніх розробників.
Елвін

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
Це зовсім не те, про що просила ОП.
Qix - MONICA ПОМИЛИЛА

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]

// ONE WAY: Перетворення масиву символів у String

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

Переваги перетворення масиву char в масив символів ви можете використовувати функцію 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.