Как преобразовать ArrayList<Character>
в String
в Java?
Метод toString
возвращает его как строку [a,b,c]
- я хочу избавиться от скобок и сохранить его как abc
.
Преобразование ArrayList символов в строку?
Ответ 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);
}