2014-10-01 299 views
-6

是否存在將String"[1,2,3]"轉換爲List<Long>的方式不那麼麻煩?我試圖找到一些好方法,但最需要許多步驟將字符串轉換爲列表

+1

你的字符串是有效的JSON,你可以使用傑克遜的ObjectMapper做到這一點,但看起來好像過度殺人 – Leon 2014-10-01 19:45:38

+0

什麼方法h你試過了嗎?你認爲「很多」步驟是什麼? – azurefrog 2014-10-01 19:46:30

+0

歡迎來到SO。請閱讀本[指南](http://stackoverflow.com/help/mcve)。你需要解析這個字符串。 – 2014-10-01 19:47:15

回答

1

一個巧妙的辦法來做到這一點是

String s = "[1,2,3]" 
s=s.sbustring(1,s.length-1); 
List<Long> numLongs = new ArrayList<Long>(); 
for(String eachString: s.split(",")){ 
    try { 
     numLongs.add(Long.parseLong(eachString)) 
    } catch (NumberFormatException e){ 
     System.out.println("failed to convert : "+s); 
    } 
} 
5

因爲這是一個數組的JSON表示,你可以使用任何JSON API。

例如使用Jackson

String s = "[1,2,3]"; 
long[] a = new ObjectMapper().reader(long[].class).readValue(s); 
List<Long> l = new ObjectMapper().reader(List.class).readValue(s); 
0

怎麼樣?

String x = "[1,2,3]"; 
List<Long> myList = new ArrayList<>(); 
for(String s : x.substring(1,x.length()-1).split(",")) { 
    myList.add(Long.valueOf(s)); 
} 

String x = "[1,2,3]"; 
List<Long> myList = new ArrayList<>(); 
for(String s : x.replaceAll("\\[|\\]","").split(",")) { 
    myList.add(Long.valueOf(s)); 
} 
0

這樣做:

public static void main(String[] args) { 

     String str= "[1,2,3]"; 
     String []arr=str.substring(1, str.length()-1).split(","); 
     List<Long>list=new ArrayList<Long>(); 
     for(int i=0;i<arr.length;i++){ 
      list.add(Long.parseLong(arr[i])); 
     } 
     System.out.println(list); 

    } 
0

在Java 8

String str = "1,2,3"; 
    String[] sp = str.split(","); 
    List<String> listSt = Arrays.asList(sp); 
    listSt.forEach(System.out::print); 
    List<Long> listLong = listSt.stream().map(str1 -> Long.parseLong(str1)).collect(Collectors.toList()); 
    listLong.forEach(System.out::print); 
+2

使用'asList'並不是真的必要; 'Arrays'有自己的靜態'stream()'方法,即'Arrays.stream(sp).map ...' – ajb 2014-10-01 20:11:06