Перетворення рядка в масив "Характер" на 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.