Как получить несколько входов, используя сканер в Java? - PullRequest
0 голосов
/ 17 мая 2019

Это ввод программы.

3

1 45 5 3 5 Fizz Buzz FizzBuzz Nil

4 13 10 2 7 Ba Bi Be Bu

49 23 5 5 10 Oong Greeng Kattu Eswah

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

Ответы [ 2 ]

1 голос
/ 17 мая 2019
Scanner scan = new Scanner("3\n" +
        "\n" +
        "1 45 5 3 5 Fizz Buzz FizzBuzz Nil\n" +
        "\n" +
        "4 13 10 2 7 Ba Bi Be Bu\n" +
        "\n" +
        "49 23 5 5 10 Oong Greeng Kattu Eswah");

ArrayList<String> strings = new ArrayList<>();
ArrayList<Integer> ints = new ArrayList<>();
while(scan.hasNext()){
    String word=scan.next();
    try {
        ints.add(Integer.parseInt(word));
    } catch(NumberFormatException e){
        strings.add(word);
    }
}

scan.close();

System.out.println(ints);
System.out.println(strings);

Если вы хотите, чтобы сканер вводил данные с консоли при помощи System.in, вам нужно какое-то триггерное слово, которое завершит цикл, например if("exit".equals(word)) break;.

0 голосов
/ 17 мая 2019

Если вход находится в файле, я бы порекомендовал использовать BufferedReader или Files.lines(), для примера сканера посмотрите другой ответ.Ниже приведен пример того, как вы можете использовать BufferedReader для чтения ввода файла.

Я бы рекомендовал использовать это регулярное выражение , чтобы проверить, является ли ввод int или String

public static void main(String[] args) {
    List<Integer> ints = new ArrayList<>();
    List<String> strings = new ArrayList<>();

    try (BufferedReader br = new BufferedReader(
        new FileReader(new File("path/to/input/file"))
    )) {
      String line;
      while((line = br.readLine()) != null) {
        String[] parts = line.split(" ");
        for (String part : parts) {
          if (part.matches("(?<=\\s|^)\\d+(?=\\s|$)")) { // regex matching int
            ints.add(Integer.parseInt(part));
          } else {
            strings.add(part);
          }
        }
      }

    }
    catch (FileNotFoundException e) {
      System.out.println(e.getMessage());
    }
    catch (IOException e) {
      System.out.println(e.getMessage());
    }

    System.out.println("content of string = ");
    strings.forEach(string -> System.out.printf("%s ", string));

     System.out.println();

    System.out.println("content of ints = ");
    ints.forEach(string -> System.out.printf("%d ", string));

  }

вывод

content of string = 
Fizz Buzz FizzBuzz Nil Ba Bi Be Bu Oong Greeng Kattu Eswah 
content of ints = 
3 1 45 5 3 5 4 13 10 2 7 49 23 5 5 10 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...