簡體   English   中英

將 ArrayList 個字符轉換為字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM