Извлеките каждое отдельное число из строки

У меня на входе "1 2 3 4 5", и я хочу, чтобы это было так

int[] numbers = new int[5];
number[0] = 1;
number[1] = 2;
number[2] = 3;
number[3] = 4;
number[4] = 5;

Итак, как я могу извлечь каждое число из строки и поместить его в массив int?

    ConsoleIO io = new ConsoleIO();
    int[] numbers = new int[5];

    io.writeOutput("Type in 5 numbers");

    String input = io.readInput();

    // If input is longer than 1 character for example, "1 2 3 4 5"
    if (input.length() > 1) {
        System.out.println(input.length());
        for(int y = 0; y < io.readInput().length(); y++) {
            numbers[y] = Integer.parseInt(io.readInput().substring(y, io.readInput().indexOf(" "))); 
        }
        return;
    }
    // If input is one number for example, "1"
    else {
        for(int i = 0; i < numbers.length; i++) {
            numbers[i] = Integer.parseInt(io.readInput());
        }
    }

Остальное работает, поэтому, если я введу одно число и нажму ввод, а затем следующее, все будет хорошо. Но если у меня есть последовательность чисел с пробелом между ними («1 2 3 4 5»), программа просто прерывается.

вы можете использовать разделение и удалить пространство java 8

Abdessamad HALLAL 25.09.2018 23:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
105
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Почему бы не использовать Scanner, а затем split и parse?

Scanner in = new Scanner(System.in);
String[] nums = in.nextLine().split(" ");
for(int i = 0; i <=5; i++) {
   numbers[i] = Integer.parseInt(nums[i]);
}

вы можете добавить Сканер в = новый Сканер (System.in); в цикле

Abdessamad HALLAL 25.09.2018 23:21

@AbdessamadHALLAL Это создало бы новый объект Scanner при каждой итерации цикла, а также потребовало бы, чтобы String[] nums = in.nextLine().split(" "); находился внутри цикла, что могло бы вызвать проблемы.

GBlodgett 25.09.2018 23:25

Я считаю, что это тоже сработало, но я выбираю ответ @Joeri Akkerman, потому что он использовал io, который я уже использовал. Спасибо за ваш ответ.

idontunderstandarrays 25.09.2018 23:32
Ответ принят как подходящий
String input = io.readInput();
int[] arr = new int[5];

if (input.length() >= 5){
    String[] c = input.split(" ");
    for(int i = 0; i < c.length(); i++){
        arr[i] = Integer.parseInt(c[i]);
    }
}

Это не удается в двух ситуациях: код не выдает ошибку, если вводов меньше пяти; и код умирает, когда имеется более пяти входов, поскольку вы выходите из конца arr, что составляет 5 длин. Вы должны либо вообще не иметь условия if и инициализировать arr после определения c, чтобы можно было установить его длину равной длине c, либо вы должны выдать ошибку, если нет ровно пяти значений.

Chai T. Rex 25.09.2018 23:36

Я только хотел показать ему метод разделения и то, как его использовать, а не показать ему весь необходимый код для его программы. На самом деле он только что написал мне, что этот ответ помог его программе. Он уже создал целую систему «анти-дурак», которая проверяет неправильный ввод, поэтому ему не было смысла печатать весь исходный код.

Joeri Akkerman 25.09.2018 23:46

Предположим, что ваш ввод - это всегда числа с пробелом между собой (или только одно число), в Java 8 вы можете работать следующим образом:

String[] splits = input.split(" ");
int[] result =  Arrays.stream(splits).mapToInt(Integer::parseInt).toArray();
import java.util.*;
public class Solution {
    public static void main(String []args) {
        Scanner in = new Scanner(System.in);
        String[] nums = in.nextLine().split(" ");
        int[] numbers = new int[5];
        for(int i = 0; i <5; i++) {
            numbers[i] = Integer.parseInt(nums[i]);
            System.out.println(numbers[i]);
        }
    }
}

Другие вопросы по теме