2012-06-15 12 views

Odpowiedz

-9

Chciałbym użyć doskonałej biblioteki Google Guava, aby to zrobić. String.split może powodować wiele problemów.

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

Dzięki i to mnie pracował. – Kathir

+6

jak to rozwiązuje problem? gdzie jest lista ? – Swamy

+3

Nie używaj standardowej Java (stąd nie jest to najłatwiejsza metoda) ani nie rozwiązuj problemu. –

40

Masz na myśli coś takiego?

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

Ponieważ Java 8 można przepisać go jako

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

nieco krótsza wersjach jeśli chcesz dostać List<String>

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

lub onliner

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

Tak, jesteś right..any inny prostszy sposób ... – 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

Czy istnieje metoda użyteczna dostępna w java lub apache commons lub jakiekolwiek inne, aby uzyskać wyniki w prosty sposób, wywołując metodę? – Kathir

+0

Możesz użyć niektórych kolekcji appache lub guava na podstawie wzorca odwiedzającego, aby przekonwertować ciąg do liczby całkowitej, ale nie spowoduje to uproszczenia kodu. Sprawi, że będzie trudniej ją odczytać. – alexey28

+0

edytowany tekst zażądał listy obiektów nie długiej listy ... – jocelyn

2

Można użyć String.split() i 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

Proste i wygodne rozwiązanie wykorzystujące (ze względu na zakończenie wątku):

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]

Jeszcze lepiej, używając Pattern.splitAsStream():

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

Jeśli nie jesteś na java8 i nie chcą korzystać pętli, a następnie można użyć 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()); 
       } 
      }); 

Jak wspominają inni za Java8 można wykorzystać strumienie.

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

Zamiast 'Arrays.asList (numbersArray.split (", ")).stream() ', po prostu' Arrays.stream (numbersArray.split (",")) 'lub' Stream.of (numbersArray.split (",")) 'może być użyty. –

+0

@ UtkuÖzdemir faktycznie nie można. W takim przypadku Lists.transform nie można użyć do konwersji ciągu na długi. –

+0

Mam na myśli rozwiązanie java8, a nie guawa. –

Powiązane problemy