2015-03-23 17 views
7

Załóżmy, że mam ciąg "1 23 40 187 298". Ten ciąg zawiera tylko liczby całkowite i spacje. Jak mogę przekonwertować ten ciąg na tablicę całkowitą, która jest [1,23,40,187,298]. ten sposób starałemjak przekonwertować ciąg całkowity oddzielony spacją na tablicę w JAVA

public static void main(String[] args) { 
    String numbers = "12 1 890 65"; 
    String temp = new String(); 
    int[] ary = new int[4]; 
    int j=0; 
    for (int i=0;i<numbers.length();i++) 
    { 

     if (numbers.charAt(i)!=' ') 
      temp+=numbers.charAt(i); 
     if (numbers.charAt(i)==' '){ 
      ary[j]=Integer.parseInt(temp); 
      j++; 
     } 
    } 
} 

ale to nie działa, należy zaoferować jakąś pomoc. Dziękuję Ci!

+0

Najpierw użyj 'numbers.split (" ");', więc masz tablicę ciągów znaków, a następnie możesz przekonwertować je na numer – tomse

+0

Zapoznaj się z tym ładnym samouczkiem na temat niezwykle przydatnej metody 'split (..)': http://www.tutorialspoint.com/java/java_string_split.htm –

+1

'String [] nums = numbers.split ("") ' Przykład: numbers =" 1 23 40 187 298 "; Następnie nums = {"1", "23", "40", "187", "298"}; Następnie można wykonać następujące czynności: 'int [] = new int arrayOfIntegers [nums.length];' 'for (int i = 0; i

Odpowiedz

9

Zapominasz o

  • resetowania temp do pustej struny po analizować je stworzyć miejsce dla nowych cyfr
  • że na końcu łańcucha nie będzie miejsca, więc

    if (numbers.charAt(i) == ' ') { 
        ary[j] = Integer.parseInt(temp); 
        j++; 
    } 
    

    nie zostanie wywołany, co oznacza, że ​​z domu d powołać

    ary[j] = Integer.parseInt(temp); 
    

    ponownie po pętli


jednak prostszy sposób byłoby tylko przy użyciu split(" ") stworzyć tymczasową tablicę żetonów, a następnie analizować każdy żeton int jak

String numbers = "12 1 890 65"; 
String[] tokens = numbers.split(" "); 
int[] ary = new int[tokens.length]; 

int i = 0; 
for (String token : tokens){ 
    ary[i++] = Integer.parseInt(token); 
} 

Innym podejściem może być użycie metody Scanner i jej metody nextInt(), aby zwracać wszystkie liczby całkowite ze swojego wejścia. Przy założeniu, że znasz już wielkość potrzebnego tablicy można po prostu użyć

String numbers = "12 1 890 65"; 
int[] ary = new int[4]; 

int i = 0; 
Scanner sc = new Scanner(numbers); 
while(sc.hasNextInt()){ 
    ary[i++] = sc.nextInt(); 
} 

także z Java 8 można używać strumieni, które mogą skrócić kod trochę

int[] array = Stream.of(numbers.split(" ")) 
        .mapToInt(token -> Integer.parseInt(token)) 
        .toArray(); 
7

Java 8+ można wykorzystać w ten sposób:

final Integer[] ints = Arrays.stream(numbers.split(" ")) 
     .map(Integer::parseInt) 
     .toArray(Integer[]::new); 

lub, jeśli trzeba prymitywne ints, można użyć tego:

final int[] ints = Arrays.stream(numbers.split(" ")) 
     .mapToInt(Integer::parseInt) 
     .toArray(); 
+0

jesteś pewien, że to będzie działać z jdk wcześniej niż 8? Jeśli moja pamięć mnie nie zawiodła, funkcja map i przekazywanie funkcji jako argumentów są dostępne tylko w java-8. – niceman

+0

Jestem pewien, że nie będzie działać w java wcześniej niż 8 – esin88

+0

dzięki esin88, twoja odpowiedź jest elegancka, ale musimy wziąć pod uwagę niektóre OP, które nie mają najnowszej wersji czegoś tak – niceman

0

Wyczyść TMP String na "" po ciebie parsuj liczbę całkowitą, chyba że chcesz kontynuować dołączanie wszystkich numerów ciągu razem. Istnieją również rozwiązania alternatywne, jak również - na przykład podział String na tablicę na characeter przestrzeni, a następnie analizowania numery indywidualnie

0

Spróbuj tego ,

public static void main(String[] args) { 
    String numbers = "12 1 890 65"; 
    String[] parts = numbers.split(" "); 

    int[] ary = new int[4]; 
    int element1 = Integer.parseInt(parts[0]); 
    int element2 = Integer.parseInt(parts[1]); 
    int element3 = Integer.parseInt(parts[2]); 
    int element4 = Integer.parseInt(parts[3]); 

    ary[0] = element1; 
    ary[1] = element2; 
    ary[2] = element3; 
    ary[3] = element4; 

    for(int i=0; i<4; i++){ 
     System.out.println(ary[i]); 
    } 

} 
Powiązane problemy