2013-07-31 38 views
13

Tôi cần trả lại mảng String. Tôi sử dụng ổi để tách String. Vui lòng xem mã bên dướiChuyển đổi Iterable thành Array

Iterable<String> arrayOfValues = Splitter.on(";").split(myString); 

trả về Iterable. nhưng tôi cần String[]. Có cách nào để cung cấp cho Iterator<Element> và chuyển đổi số đó thành Array[]. Nhiều Cảm ơn

Trả lời

18

Nếu bạn sử dụng phương thức Java String.split (regex) đơn giản, bạn ổn. Nó trả về một String [].

"my;string".split(";") 

String[] splits = mystring.split(";"); 

Không sử dụng thư viện ưa thích nếu bạn không cần chúng.

3

Bạn cũng có thể sử dụng ổi của FluentIterable:

FluentIterable.from(Splitter.on(":").split(mystring)).toArray(String.class) 
0

Trong ổi bạn có thể chuyển đổi nó như sau

String test= "Welcome to java world"; 
Iterable<String> tokens=Splitter.on(" ").split(test); 
String array[]=Iterables.toArray(tokens,String.class); 

Nếu bạn chỉ muốn truy cập vào các yếu tố Iterator như một mảng thì không cần phải chuyển đổi . Bạn có thể trực tiếp truy cập vào các yếu tố của chỉ số

ví dụ

System.out.println(Iterables.get(tokens,2)); 
0

Mặc dù câu hỏi nói "Chuyển đổi Iterator để Array", câu trả lời duy nhất giải thích làm thế nào để chuyển đổi Iterable để Array.

Vì vậy, để chuyển đổi Iterator thành Mảng với ổi, bạn có thể sử dụng Iterators.toArray(Iterator<? extends T> iterator, Class<T> type).

0

Nếu không có ổi, bạn có thể chuyển đổi một Iterable<String> đến một mảng với một cái gì đó như thế này

public static <String> String[] toArray(Iterable<String> itr) { 
    ArrayList<String> ret = new ArrayList<>(); 
    for(String t : itr) { 
     ret.add(t); 
    } 
    return ret.toArray(new String[]); 
} 

Đó là một chút khó khăn để viết một phiên bản generic của chức năng này do myriad issues with generic arrays in Java, để bước đi nhẹ nhàng.

Các vấn đề liên quan