[英]Converting ArrayList of Characters to a String?
如何將ArrayList<Character>
轉換為 Java 中的String
?
List.toString
方法將其作為[a,b,c]
字符串返回 - 我想去掉括號(等等)並將其存儲為abc
。
您可以遍歷列表並創建字符串。
String getStringRepresentation(ArrayList<Character> list)
{
StringBuilder builder = new StringBuilder(list.size());
for(Character ch: list)
{
builder.append(ch);
}
return builder.toString();
}
將StringBuilder
的容量設置為列表大小是一項重要的優化。 如果您不這樣做,一些append
調用可能會觸發構建器的內部調整大小。
順便說一句, toString()
返回 ArrayList 內容的人類可讀格式。 不值得花時間從中過濾掉不必要的字符。 它的實現明天可能會改變,你將不得不重寫你的過濾代碼。
這是使用 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());
請注意,上述解決方案中的map(e->e.toString())
步驟將為列表中的每個字符創建一個臨時字符串。 琴弦立即變成垃圾。 因此,如果轉換的性能是一個相關問題,您應該考慮改用StringBuilder
方法。
這個怎么樣,建立清單
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);
如果有錯誤指出,仍在學習中。
您可以使用 toString() 和 RegExp 來完成它,而無需任何循環和流:
List<Character> list = Arrays.asList('a', 'b', 'c'); String s = list.toString().replaceAll("[,\\s\\[\\]]", "");
使用Joiner
join
的連接:
// 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());
假設您有以下列表:
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));
對@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());
最簡單的就是循環。
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);
許多解決方案可用。 您可以將字符和 append 迭代到 StringBuilder,然后在完成附加后,在 StringBuilder 上調用.toString。
或者使用 apache commons-lang 項目中的 commons-lang StringUtils.join 之類的東西。
我認為這是一種簡單而聰明的方法
// given list containing the chars
List<Character> arr = Arrays.asList('a', 'b', 'c');
// convert to string.
String str = arr.toString(); // result is "[abc]"
// get rid of the start and the end char i.e '[' & ']'
arr = arr.substring(1, tmpArr.length()-1); //result is "abc"
我會說:
public String arayListToString(ArrayList arrayList){
StringBuffer b = new StringBuffer();
for(String s : arrayList){
b.append(s);
b.append(",");
}
return b.toString();
}
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.