簡體   English   中英

如何將字符串的ArrayList轉換為char數組

[英]How to convert ArrayList of Strings to char array

以下代碼將ArrayList<String>轉換為char[]並打印輸出,顯示為[back, pack] 在這里, char[]包含','' ' 有沒有一種方法可以擺脫逗號和空格?

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);
}

您可以通過在ArrayList<String>加入String ,然后從結果中獲取char[]來實現:

char[] chars = list.stream().collect(Collectors.joining()).toCharArray();

這里的.stream.collect(Collectors.joining())部分是Java 8 Stream方法,用於將一串Strings合並為一個。 請參閱: Collectors.joining()文檔。

如果要在結果中各部分之間使用任何定界符,請改用Collectors.joining(delimiter)

還有一個重載,它會在結果中添加前綴和后綴,例如,如果要在結果中添加[] ,請使用Collectors.joining("", "[", "]")

只需替換此行

char[] chars = list.toString().toCharArray();

以下兩行

String str=list.toString().replaceAll(",", "");
char[] chars = str.substring(1, str.length()-1).replaceAll(" ", "").toCharArray();

list上的toString方法是添加逗號和空格的方法,它是listString表示形式。 由於listString的集合,因此您無需在其上調用toString ,只需遍歷該集合即可使用toCharArray將每個String轉換為chars數組(我假設您可能會希望添加所有Strings的所有chars一起)。

Java代碼中charArray的字符串:

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 );

只是一個示例,您應如何解析大列表到數組副本。 注意字符數必須小於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而不是循環復制數組

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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