2014-12-08 5 views
0

Я читаю строку, как целую строку чисел, разделенную пробелов, то есть 1 2 3 4 5. Я хочу преобразовать их в массив целых чисел, чтобы я мог ими манипулировать. Но этот код не работает. В нем говорится о несовместимых типах.Преобразование строки в массив ints ex String st = "1 2 3 4 5" в ar = [1,2,3,4,5]

String str = br.readLine(); 
int[] array = new int[4]; 
StringTokenizer tok = new StringTokenizer(str," ", true); 
boolean expectDelim = false; 
int i = 0; 

while (tok.hasMoreTokens()) { 
    String token = tok.nextToken(); 
    ar[i] = Integer.parseInt(token); 
    i++; 
} 
+2

«несовместимые тип» - на какую линию ? Как бы то ни было, это не скомпилируется: вы смешиваете 'ar' и' array'. Пожалуйста, дайте нам полный образец! И в любом случае ваш массив слишком короткий для 12345: почему бы не использовать ArrayList? – Rup

+0

, на которой вы получаете ошибку компиляции – Panther

+1

Кроме того, [JDK] (https://docs.oracle.com/javase/8/docs/api/java/util/StringTokenizer.html) говорит: «StringTokenizer - это унаследованный класс который сохраняется по соображениям совместимости, хотя его использование не рекомендуется в новом коде. Рекомендуется, чтобы каждый, кто ищет эту функциональность, использовал метод split для String или пакет java.util.regex. " – Rup

ответ

5

Если у вас есть String s = "1 2 3 4 5", то вы можете разделить его на отдельные биты, как это:

String[] bits = s.split(" "); 

Теперь вы должны поместить их в int[] путем преобразования каждого из них:

int[] nums = new int[bits.length]; 
int i=0; 
for (String s: bits) 
    nums[i++] = Integer.parseInt(s); 

Это будет проходить через каждую из маленьких строк в массиве split, преобразовать его в целое число и поместить в новый массив.

+0

Спасибо, что он работал гладко! – user2860954

2

Вам не нужны разделители. Изменить это:

StringTokenizer tok = new StringTokenizer(str," ", true); 

к этому:

StringTokenizer tok = new StringTokenizer(str," "); 

Что происходит в вашем коде, что он пытается разобрать (пробел) как int.

В качестве альтернативы, в настоящее время большинство людей просто используют String.split(...), как указано в chiastic-security.

1

Java решение 8 стиля:

String input = "1 2 3 4 5"; 

int[] numbers = Arrays.stream(input.split("\\s+")) 
     .mapToInt(Integer::parseInt).toArray(); 
+1

Yay, Java 8! Вы можете напрямую 'stream()' массивы, не требуется промежуточное 'asList()'. –

+0

@ChristianHujer Спасибо, отредактировал мой ответ. – Jesper

1

Вы можете использовать следующий код, чтобы преобразовать строку, состоящую из разделенных пробельных чисел на int[]:

import static java.util.Arrays.stream; 

public class ConvertString { 
    public static void main(final String... args) { 
     final String s = "1 2 3 4 5"; 
     final int[] numbers = stream(s.split("\\s+")).mapToInt(Integer::parseInt).toArray(); 

     // Print it as a demo. 
     for (final int number : numbers) 
      System.out.format("%s ", number); 
     System.out.println(); 
    } 
}