2014-10-01 300 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