2012-06-15 186 views

回答

-9

我會用優秀的谷歌的番石榴庫來做到這一點。 String.split會導致很多麻煩。

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

謝謝,它得到了工作。 – Kathir

+6

它是如何解決問題的?列表在哪裏? – Swamy

+3

不要使用標準的Java(因此不是最簡單的方法),既不能解決問題。 –

40

你的意思是這樣的嗎?

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); 

由於Java 8,你可以把它改寫爲

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

短一點的版本,如果你想獲得List<String>

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

或onliner

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

是的,你是對的..其他更簡單的方式... – 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

java或apache commons或其他任何可用的實用方法是否可以通過調用方法以簡單的方式獲得結果? – Kathir

+0

您可以使用一些基於訪問者模式的appache或番石榴集合將String轉換爲Integer,但它不會使代碼變得簡單。這會讓閱讀變得更難。 – alexey28

+0

文本被編輯,他要求一個對象列表不是一個長列表... – jocelyn

2

您可以使用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

使用簡單和方便的解決方案(該線程完成的緣故):

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]

更妙的是,使用Pattern.splitAsStream()

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

如果你不是java8,不希望使用循環,那麼你可以使用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()); 
       } 
      }); 

正如其他人所說的Java8你可以使用流。

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

而不是'Arrays.asList(numbersArray.split(「,」))。可以使用stream()',只需'Arrays.stream(numbersArray.split(「,」))'或'Stream.of(numbersArray.split(「,」))'。 –

+0

@UtkuÖzdemir實際上不能。在這種情況下,Lists.transform不能用於將字符串轉換爲長整型。 –

+0

我的意思是java8解決方案,而不是番石榴。 –

相關問題