2012-06-15 41 views

Trả lời

-9

Tôi sẽ sử dụng thư viện ổi của Google tuyệt vời để làm điều đó. String.split có thể gây ra nhiều rắc rối.

String numbers="1,2,3,4,5,6,7"; 
Iterable<String> splitIterator = Splitter.on(',').split(numbers); 
List<String> list= Lists.newArrayList(splitIterator); 
+0

Cảm ơn và nó đã hoạt động. – Kathir

+6

cách giải quyết sự cố? Danh sách ở đâu? – Swamy

+3

Không sử dụng Java chuẩn (do đó không phải là phương pháp dễ nhất), không giải quyết được vấn đề. –

40

Bạn có ý nghĩa như thế này?

String numbers = "1,2,3,4,5,6,7"; 

List<Long> list = new ArrayList<Long>(); 
for (String s : numbers.split(",")) 
    list.add(Long.parseLong(s)); 

System.out.println(list); 

Kể từ Java 8 bạn có thể viết lại nó như

List<Long> list = Stream.of(numbers.split(",")) 
     .map(Long::parseLong) 
     .collect(Collectors.toList()); 

phiên bản ngắn hơn Ít nếu bạn muốn nhận được List<String>

List<String> fixedSizeList = Arrays.asList(numbers.split(",")); 
List<String> rezisableList = new ArrayList<>(fixedSizeList); 

hoặc onliner

List<String> list = new ArrayList<>(Arrays.asList(numbers.split(","))); 
+0

Có, bạn đúng ... cách đơn giản khác ... – Kathir

3
String input = "1,2,3,4,5,6,7"; 
String[] numbers = input.split("\\,"); 
List<Integer> result = new ArrayList<Integer>(); 
for(String number : numbers) { 
    try { 
     result.add(Integer.parseInt(number.trim())); 
    } catch(Exception e) { 
     // log about conversion error 
    } 
} 
+0

Có phương pháp tiện ích nào có sẵn trong java hoặc apache commons hay bất kỳ phương thức nào khác để có được kết quả một cách đơn giản bằng cách gọi một phương thức? – Kathir

+0

Bạn có thể sử dụng một số bộ sưu tập appache hoặc dung nham dựa trên mẫu khách truy cập để chuyển đổi chuỗi thành số nguyên, nhưng nó sẽ không làm cho mã đơn giản. Nó sẽ làm cho nó khó đọc hơn. – alexey28

+0

văn bản đã được chỉnh sửa, ông đã yêu cầu một danh sách đối tượng không phải là một danh sách dài ... – jocelyn

2

Bạn có thể sử dụng String.split()Long.valueOf():

String numbers = "1,2,3,4,5,6,7"; 
List<Long> list = new ArrayList<Long>(); 
for (String s : numbers.split(",")) 
    list.add(Long.valueOf(s)); 

System.out.println(list); 
4

giải pháp đơn giản và tiện dụng sử dụng (đối với mục đích hoàn chỉnh các chủ đề của):

String str = "1,2,3,4,5,6,7"; 
List<Long> list = Arrays.stream(str.split(",")).map(Long::parseLong).collect(Collectors.toList()); 
System.out.println(list); 

[1, 2, 3, 4, 5, 6, 7]

Thậm chí tốt hơn, sử dụng Pattern.splitAsStream():

Pattern.compile(",").splitAsStream(str).map(Long::parseLong).collect(Collectors‌​.toList()); 
1

Nếu bạn không phải trên java8 và không muốn sử dụng vòng, sau đó bạn có thể sử dụng Guava

List<Long> longValues = Lists.transform(Arrays.asList(numbersArray.split(",")), new Function<String, Long>() { 
       @Override 
       public Long apply(String input) { 
        return Long.parseLong(input.trim()); 
       } 
      }); 

Như những người khác đã đề cập cho Java8, bạn có thể sử dụng Luồng.

 List<Long> numbers = Arrays.asList(numbersArray.split(",")) 
           .stream() 
           .map(String::trim) 
           .map(Long::parseLong) 
           .collect(Collectors.toList());; 
+0

Thay vì 'Arrays.asList (numbersArray.split (", ")).stream() ', đơn giản' Arrays.stream (numbersArray.split (",")) 'hoặc' Stream.of (numbersArray.split (",")) 'có thể được sử dụng. –

+0

@ UtkuÖzdemir thực sự không thể. Trong trường hợp đó Lists.transform không thể được sử dụng để chuyển đổi String thành Long. –

+0

Tôi có nghĩa là giải pháp java8, không phải là ổi. –

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