2016-02-03 168 views
0

以下代碼將ArrayList<String>轉換爲char[]並顯示爲[back, pack]的打印輸出。這裏,char[]包括','' '。有沒有辦法以另一種方式來擺脫逗號和空格?如何將字符串的ArrayList轉換爲字符數組

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

toStringlist方法是什麼加上逗號和空格,這是你的listString表示。由於listString的集合,因此您不需要調用toString就可以了,只需遍歷集合,將每個String轉換爲一個使用toCharArray的字符數組(我假設您可能希望添加所有字符串的所有字符一起)。

+0

答案沒有提供將'ArrayList '轉換爲'char []'的方法。 – hotkey

+0

的確如此,它的含義是「操縱數據的方式」。我試圖指出他得到的錯誤。儘管我會修改答案。 – mohammedkhan

+0

好的,取消了downvote。 – hotkey

3

您可以通過在你的ArrayList<String>加入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

相關問題