2013-03-11 49 views
12

Cách chuyển đổi chuỗi không có dấu phân cách thành ArrayList<Character>.chuyển đổi chuỗi thành arraylist <Character> trong java

Chuỗi của tôi là như thế này:

String str = "abcd..." 

Tôi biết một trong những cách để làm điều này là chuyển đổi String để char[] đầu tiên, và sau đó chuyển đổi char []-ArrayList <Character>.

Có cách nào tốt hơn để thực hiện việc này không? như chuyển đổi trực tiếp? Xem xét thời gian và hiệu suất, bởi vì tôi đang mã hóa với một cơ sở dữ liệu lớn.

+0

Vì vậy ... bạn có muốn lấy chuỗi ngầm và chuyển đổi từng ký tự trong đó thành tập hợp một số loại không? Nếu là vậy, bạn đã thử cái gì? Một số mã mẫu sẽ có lợi. – Makoto

+0

Bạn có thực sự muốn chuyển đổi thành 'ArrayList' hoặc chỉ cần chuỗi thành' Danh sách' được hỗ trợ bởi chuỗi gốc không? –

+0

@Makoto Tôi đã thử 'char [] chars = str.toCharArray(); ArrayList mylist = new ArrayList (); cho (char c: chars) mylist.add (c); ' –

Trả lời

2

Nếu bạn DN không cần phải sửa đổi danh sách sau khi nó tạo ra, có lẽ là cách tốt hơn sẽ được quấn dây vào lớp thực hiện giao diện List<Character> như thế này:

import java.util.AbstractList; 
import java.util.List; 

public class StringCharacterList extends AbstractList <Character> 
{ 
    private final String string; 

    public StringCharacterList (String string) 
    { 
     this.string = string; 
    } 

    @Override 
    public Character get (int index) 
    { 
     return Character.valueOf (string.charAt (index)); 
    } 

    @Override 
    public int size() 
    { 
     return string.length(); 
    } 
} 

Và sau đó sử dụng lớp này như thế này:

List <Character> l = new StringCharacterList ("Hello, World!"); 
System.out.println (l); 
+0

Cảm ơn, nhưng những gì tôi cần là một ArrayList :) –

1
public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String str = "abcd..."; 
     ArrayList<Character> a=new ArrayList<Character>(); 
     for(int i=0;i<str.length();i++) 
     { 
      a.add(str.charAt(i)); 

     } 
     System.out.println(a); 
    } 
+0

Cảm ơn, tôi đã thử cách này như tôi đã đề cập trong bài viết của tôi. –

10

Bạn cần thêm nó như thế này.

String str = "abcd..."; 
ArrayList<Character> chars = new ArrayList<Character>(); 
for (char c : str.toCharArray()) { 
    chars.add(c); 
} 
+0

Vâng. Tôi không nghĩ nó hoạt động. str.toCharArray() sẽ trả về char [], trong khi bạn gán nó cho một ArrayList với kiểu Character. Để chính xác hơn, bạn không thể chuyển đổi một mảng các nguyên thủy thành một ArrayList như thế này. –

+0

@aga_pan Đã cập nhật. – squiguy

+0

Điều này sẽ làm việc :), nhưng như tôi đã đề cập, bạn chuyển đổi chuỗi thành một mảng char đầu tiên, và sau đó thêm nó từng cái một để có được ArrayList. Tôi đang xem xét các chi phí không gian và thời gian trong khi chuỗi là rất lớn và số lượng các chuỗi cũng rất lớn trong một cơ sở dữ liệu. –

0

bạn có thể làm điều đó như thế này:

import java.util.ArrayList; 

public class YourClass{ 

    public static void main(String [] args){ 

     ArrayList<Character> char = new ArrayList<Character>(); 
     String str = "abcd..."; 

     for (int x = 0; x < str.length(); x ++){ 
      char.add(str.charAt(x)); 
     } 
    } 
} 
0

Có một dòng guava giải pháp:

Lists.charactersOf("hello"); 

Bạn có thể vượt qua kết quả ImmutableList đến constructor của ArrayList nhưng tôi có thể hỏi tại sao bạn cần chính xác ArrayList?

1

Xin lỗi cho Retrobump, nhưng điều này bây giờ thực sự dễ dàng!

Bạn có thể thực hiện việc này dễ dàng trong Java 8 bằng cách sử dụng Luồng! Hãy thử điều này:

String string = "testingString"; 
List<Character> list = string.chars().mapToObj((i) -> Character.valueOf((char)i)).collect(Collectors.toList()); 
System.out.println(list); 

Bạn cần phải sử dụng mapToObjchars() trả về một IntStream.

4

sử dụng biểu thức lambda để thực hiện việc này.

String big_data = "big-data"; 
ArrayList<Character> chars 
     = new ArrayList<>(
       big_data.chars() 
       .mapToObj(e -> (char) e) 
       .collect(
         Collectors.toList() 
       ) 
     );  
Các vấn đề liên quan