Ответ 1
Вы можете прочитать всю строку ввода из сканера, затем разделите строку на ,
, тогда у вас есть String[]
, проанализируйте каждое число в int[]
с индексом один на один, соответствующий... (предполагая действительный ввод и no NumberFormatExceptions
), например
String line = scanner.nextLine();
String[] numberStrs = line.split(",");
int[] numbers = new int[numberStrs.length];
for(int i = 0;i < numberStrs.length;i++)
{
// Note that this is assuming valid input
// If you want to check then add a try/catch
// and another index for the numbers if to continue adding the others (see below)
numbers[i] = Integer.parseInt(numberStrs[i]);
}
Как YoYo answer, вышесказанное может быть достигнуто более кратко в Java 8:
int[] numbers = Arrays.stream(line.split(",")).mapToInt(Integer::parseInt).toArray();
Для обработки недопустимого ввода
Вам нужно будет рассмотреть, что вам нужно сделать в этом случае, хотите ли вы знать, что в этом элементе был плохой ввод или просто пропустить его.
Если вам не нужно знать о недопустимом входе, но просто хотите продолжить синтаксический анализ массива, вы можете сделать следующее:
int index = 0;
for(int i = 0;i < numberStrs.length;i++)
{
try
{
numbers[index] = Integer.parseInt(numberStrs[i]);
index++;
}
catch (NumberFormatException nfe)
{
//Do nothing or you could print error if you want
}
}
// Now there will be a number of 'invalid' elements
// at the end which will need to be trimmed
numbers = Arrays.copyOf(numbers, index);
Причина, по которой мы должны урезать результирующий массив, состоит в том, что недопустимые элементы в конце int[]
будут представлены 0
, их нужно удалить, чтобы различать допустимое входное значение 0
.
Результаты в
Вход: "2,5,6, плохо, 10"
Выход: [2,3,6,10]
Если вам нужно знать о некорректном входе позже, вы можете сделать следующее:
Integer[] numbers = new Integer[numberStrs.length];
for(int i = 0;i < numberStrs.length;i++)
{
try
{
numbers[i] = Integer.parseInt(numberStrs[i]);
}
catch (NumberFormatException nfe)
{
numbers[i] = null;
}
}
В этом случае плохой ввод (не действительное целое число) элемент будет null.
Результаты в
Вход: "2,5,6, плохо, 10"
Выход: [2,3,6, null, 10]
Вы могли бы повысить производительность, не поймав исключение (см. этот вопрос для получения дополнительной информации об этом) и используйте другой метод для проверки действительных целых чисел.