2015-03-23 5 views
7

Angenommen, ich habe eine Zeichenfolge "1 23 40 187 298". Diese Zeichenfolge enthält nur Ganzzahlen und Leerzeichen. Wie kann ich diese Zeichenfolge in ein Integer-Array konvertieren, das [1,23,40,187,298] ist. das ist, wie ichwie eine Integer-Zeichenfolge durch Leerzeichen in ein Array in JAVA konvertieren

versucht
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++; 
     } 
    } 
} 

aber es funktioniert nicht, bieten bitte etwas Hilfe. Vielen Dank!

+0

Verwenden 'numbers.split (“ „);' zuerst, so dass Sie ein Array von Strings haben und dann können Sie wandeln sie die in int – tomse

+0

Werfen Sie einen Blick auf dieses nette Tutorial zu der äußerst nützlichen Methode 'split (..)': http://www.tutorialspoint.com/java/java_string_split.htm –

+1

'String [] nums = Zahlen.split ("") ' Beispiel: numbers =" 1 23 40 187 298 "; Dann nums = {"1", "23", "40", "187", "298"}; Dann können Sie wie folgt vorgehen: 'int [] arrayOfIntegers = new int [nums.length];' 'for (int i = 0; i

Antwort

9

Sie vergessen über

  • temp zu leeren String zurückzusetzen, nachdem Sie es analysieren zu schaffen Platz für neue Ziffern
  • , die am Ende der Zeichenfolge wird keinen Platz sein, so

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

    nicht geltend gemacht werden, was bedeutet, Sie nee d einmal

  • wieder nach der Schleife

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

    aufrufen


Aber einfacher Weise nur split(" ") verwenden würde temporäre Array von Token zu erstellen und dann jedes Token int wie

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

Andere Methode könnte Scanner und seine nextInt() Methode verwenden, um alle Ganzzahlen von Ihrer Eingabe zurückzugeben. Mit Annahme, dass Sie bereits die Größe der benötigten Array wissen können Sie einfach

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

auch mit Java 8 Sie Streams verwenden können, die Ihren Code ein wenig

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

für Java 8+ Sie auf diese Weise verwenden können:

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

oder, wenn Sie primitive Ints benötigen, können Sie diese verwenden:

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

bist du sicher, dass dies mit einem jdk früher als 8 funktioniert? Wenn mein Gedächtnis mir nicht versagt hat, sind die Kartenfunktion und die Übergabe von Funktionen als Argumente nur in Java-8 verfügbar. – niceman

+0

Ich bin sicher, es wird nicht in Java früher, dass 8 – esin88

+0

Dank esin88, Ihre Antwort ist elegant, aber wir müssen einige OPs, die nicht die neueste Version von etwas haben – niceman

0

die tmp String wieder auf "", nachdem Sie Analysiere die ganze Zahl, es sei denn, du möchtest weiterhin alle Zahlen des Strings zusammenfügen. Darüber hinaus gibt es auch Alternativen - zum Beispiel den String in ein Array auf dem Raum characeter Aufspalten und Parsen dann die Zahlen einzeln

0

Try this verkürzen out ,

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

} 
Verwandte Themen