Подтвердить что ты не робот

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

Как преобразовать ArrayList<Character> в String в Java? Метод toString возвращает его как строку [a,b,c] - я хочу избавиться от скобок и сохранить его как abc.

4b9b3361

Ответ 1

Вы можете выполнить итерацию по списку и создать строку.

String getStringRepresentation(ArrayList<Character> list)
{    
    StringBuilder builder = new StringBuilder(list.size());
    for(Character ch: list)
    {
        builder.append(ch);
    }
    return builder.toString();
}

Как в стороне, toString() возвращает человеко-читаемый формат содержимого ArrayList. Не стоит отфильтровывать ненужные символы из него. Его реализация может измениться завтра, и вам придется переписать свой код фильтрации.

Ответ 2

Здесь возможно однострочное решение с использованием потоков Java8.

a) Список объектов символов для строки:

String str = chars.stream().map(e->e.toString()).reduce((acc, e) -> acc  + e).get();

b) массив символов (char [] символов)

String str = Stream.of(chars).map(e->new String(e)).reduce((acc, e) -> acc  + e).get();

ОБНОВЛЕНИЕ (следующий комментарий ниже):

a) Список объектов символов для строки:

String str = chars.stream().map(e->e.toString()).collect(Collectors.joining());

b) массив символов (char [] символов)

String str = Stream.of(chars).map(e->new String(e)).collect(Collectors.joining());

Ответ 3

Вы можете сделать это, используя toString() и RegExp без каких-либо циклов и потоков:

List<Character> list = Arrays.asList('a', 'b', 'c'); String s = list.toString().replaceAll("[,\\s\\[\\]]", "");

Ответ 4

Легче всего прокручивать.

List<String> strings = new ArrayList<String>();

// populate strings

StringBuilder builder = new StringBuilder();

for(String string : strings) {
    builder.append(string).append(',');
}

if(builder.length() > 0) {
builder.deleteCharAt(builder.length() - 1);
}

System.out.println(builder);

Ответ 5

Предполагая, что у вас есть следующий список:

final ArrayList<Character> charsList = new ArrayList<Character>();
charsList.add('h');
charsList.add('e');
charsList.add('l');
charsList.add('l');
charsList.add('o');

Это даст hello (я использую org.apache.commons.lang.ArrayUtils вспомогательный класс):

final Character[] charactersArray =
    charsList.toArray(new Character[charsList.size()]);
final char[] charsArray = ArrayUtils.toPrimitive(charactersArray);
System.out.println(String.valueOf(charsArray));

Ответ 6

Как насчет этого, Построение списка

List<Character> charsList = new ArrayList<Character>();
charsList.add('h');
charsList.add('e');
charsList.add('l');
charsList.add('l');
charsList.add('o');

Фактический код для получения строки из списка символов:

String word= new String();
for(char c:charsList){
word= word+ c; 
}
System.out.println(word);

Продолжайте учиться, если есть недоразумение.

Ответ 7

Доступны многие решения. Вы можете перебирать символы и добавлять к StringBuilder, а затем, когда закончите добавлять, вызовите .toString в StringBuilder.

Или используйте что-то вроде commons-lang StringUtils.join из проекта apache commons-lang.

Ответ 8

Я бы сказал:

public String arayListToString(ArrayList arrayList){

StringBuffer b = new StringBuffer();

for(String s : arrayList){
   b.append(s);
   b.append(",");
}

return b.toString();
}

Ответ 9

Используя join класса Joiner:

// create character list and initialize 
List<Character> arr = Arrays.asList('a', 'b', 'c');   
String str = Joiner.on("").join(arr);
System.out.println(str);

Используйте toString, затем удалите , and spaces

import com.google.common.base.Joiner; 

....
<Character> arr = Arrays.asList('h', 'e', 'l', 'l', 'o'); 
// remove [] and spaces 
String str = arr.toString() 
          .substring(1, 3 * str.size() - 1) //3 bcs of commas ,
          .replaceAll(", ", ""); 
System.out.println(str);

Или с помощью потоков:

import java.util.stream.Collectors; 
...
// using collect and joining() method 
String str =  arr.stream().map(String::valueOf).collect(Collectors.joining()); 

Ответ 10

крошечное дополнение к ответу @waggledans

a) Список объектов символов для строки:

String str = chars.stream().map(e->e.toString()).collect(Collectors.joining());

который e->e.toString() можно заменить на Object::toString

String str = chars.stream().map(Object::toString).collect(Collectors.joining());

Ответ 11

 private void countChar() throws IOException {
    HashMap hashMap = new HashMap();
    List list = new ArrayList();
    list = "aammit".chars().mapToObj(r -> (char) r).collect(Collectors.toList());
    list.stream().forEach(e -> {
        hashMap.computeIfPresent(e, (K, V) -> (int) V + 1);
        hashMap.computeIfAbsent(e, (V) -> 1);
    });

    System.out.println(hashMap);

}