2016-02-03 3 views
0

Следующий код преобразует ArrayList<String> в char[] и выводит вывод вывода, который отображается как [back, pack]. Здесь char[] включает в себя ',' и ' '. Есть ли способ сделать это по-другому, чтобы избавиться от запятой и пространства?Как преобразовать ArrayList of Strings в массив символов

ArrayList<String> list = new ArrayList<String>(); 
list.add("back"); 
list.add("pack"); 

char[] chars = list.toString().toCharArray(); 

for (char i : chars){ 
    System.out.print(i); 
} 
+1

Это не очень хорошая идея в целом полагаться на поведение ToString. Хотя что-то вроде ArrayList вряд ли изменит реализацию toString, другие классы могут, что означало бы, что любой написанный вами код опирается на него, он больше не будет работать так, как ожидалось. –

ответ

1

Просто замените эту строку

char[] chars = list.toString().toCharArray(); 

с ниже двух линий

String str=list.toString().replaceAll(",", ""); 
char[] chars = str.substring(1, str.length()-1).replaceAll(" ", "").toCharArray(); 
2

Ваш toString метод на list является то, что добавляет запятую и пробел, это String представление вашего list. Поскольку list представляет собой набор из String s, вам не нужно называть его toString, просто перебирайте коллекцию, преобразуя каждый String в массив символов, используя toCharArray (предположим, вы, вероятно, захотите добавить все символы всех строк вместе).

+0

Ответ не предоставляет способ преобразования 'ArrayList ' в 'char []'. – hotkey

+0

Это правда, это было своего рода следствием «манипулирования данными, как вы этого хотите». Я пытался указать на ошибку, которую он получал. Однако я исправлю ответ. – mohammedkhan

+0

Хорошо, отменил нижний план. – hotkey

3

Вы можете сделать это путем присоединения String с в вашем ArrayList<String>, а затем получить char[] из результата:

char[] chars = list.stream().collect(Collectors.joining()).toCharArray(); 

.stream.collect(Collectors.joining()) Здесь часть Java 8 Стрим способ присоединиться к последовательности Strings в один. См.: Collectors.joining() документы.

Если вам нужен какой-либо разделитель между частями в результате, вместо этого используйте Collectors.joining(delimiter).

Там также перегрузка, которая добавляет префикс и суффикс к результату, к примеру, если вы хотите [ и ] в нем, используйте Collectors.joining("", "[", "]").

1

Строка charArray в Java Код:

ArrayList<String> list = new ArrayList<String>(); 
ArrayList<Character> chars = new ArrayList<Character>(); 
list.add("back"); 
list.add("pack"); 
for (String string : list) 
{ 
    for (char c : string.toCharArray()) 
    { 
     chars.add(c); 
    } 
} 
System.out.println(chars); 
0

Просто пример того, как вы должны решить большой список для копирования массива. Остерегайтесь числа символов должно быть меньше Integer.MAX. Этот код является всего лишь примером того, как это можно сделать. Существует множество проверок, которые необходимо выполнить, чтобы этот код работал правильно.

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

public class WrappedList { 

    //Or replace with some better counter 
    int totalCharCount = 0; 
    final List<String> list; 

    public WrappedList() { 
     this(new ArrayList<String>()); 
    } 

    public WrappedList(final List<String> list) { 
     this.list = list; 
    } 

    public void add(final String toAdd) { 
     if(toAdd != null) { 
      totalCharCount += toAdd.length(); 
      this.list.add(toAdd); 
     } 
    } 

    public List<String> getList() { 
     return Collections.unmodifiableList(list); 
    } 

    public char[] toCharArray() { 
     return this.toCharArray(this.totalCharCount); 
    } 


    public char[] toCharArray(final int charCountToCopy) { 
     final char[] product = new char[charCountToCopy]; 
     int buffered = 0; 
     for (String string : list) { 
      char[] charArray = string.toCharArray(); 
      System.arraycopy(charArray, 0, product, buffered, charArray.length); 
      buffered += charArray.length; 
     } 
     return product; 
    } 

    //Utility method could be used also as stand-alone class 
    public char[] toCharArray(final List<String> all) { 
     int size = all.size(); 
     char[][] cpy = new char[size][]; 
     for (int i = 0; i < all.size(); i++) { 
      cpy[i] = all.get(i).toCharArray(); 
     } 
     int total = 0; 
     for (char[] cs : cpy) { 
      total += cs.length; 
     } 
     return this.toCharArray(total); 
    } 

    public static void main(String[] args) { 
     //Add String iteratively 
     WrappedList wrappedList = new WrappedList(); 
     wrappedList.add("back"); 
     wrappedList.add("pack"); 
     wrappedList.add("back1"); 
     wrappedList.add("pack1"); 
     final char[] charArray = wrappedList.toCharArray(); 
     System.out.println("Your char array:"); 
     for (char c : charArray) { 
      System.out.println(c); 
     } 

     //Utility method one time for all, should by used in stand-alone Utility class 
     System.out.println("As util method"); 
     System.out.println(wrappedList.toCharArray(wrappedList.getList())); 
    } 

} 

Смотрите также: system-arraycopy-than-a-for-loop-for-copying-arrays

Смежные вопросы