2014-10-01 2 views
-6

Есть ли не так-грязный способ преобразования String"[1,2,3]" в List<Long>? Я попытался найти несколько хороших способов, но большинство принимает много шаговПреобразование строки в список

+1

Ваша строка является действительным JSON, вы можете использовать ObjectMapper Джексона, чтобы сделать это, но это похоже на убийства – Leon

+0

Какие способы h а вы пробовали? Что вы считаете «многими» шагами? – azurefrog

+0

Добро пожаловать в SO. Пожалуйста, прочитайте это [руководство] (http://stackoverflow.com/help/mcve). Вам нужно разобрать эту строку. –

ответ

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

Смежные вопросы