Подача сканера через строку

Вот моя основная цель: преобразовать программу, которая использует сканер и клавиатуру в качестве входных данных, в программу, которая использует аргументы сканера и java в качестве входных данных. Это будет сделано программно для различных программ, поэтому я хотел бы внести как можно меньше и как можно меньше изменений в саму программу. Я могу сделать это, изменив Scanner scanner = new Scanner(System.in); на Scanner scanner = new Scanner(args[0]);.

Теперь я могу разделить каждый аргумент пробелом в args[0], и программа работает нормально, но ТОЛЬКО если она не использует scanner.nextLine(). Как только используется scan.nextLine(), сканер поглощает всю строку и ломает программу.

Я не могу найти обходной путь, не меняя структуру программы вместе (удаляя все scanner.nextLine()s. Может быть, есть какой-то символ/последовательность, которая остановит scan.nextLine(), или он всегда будет обрабатывать всю строку?

Спасибо

Редактировать: Моя первоначальная идея состояла в том, чтобы дать сканеру массив строк и пройти через него, индексируя по индексу, независимо от того, какой метод использовался (next, nextInt, nextLine). Возможно ли это?


person Nathan    schedule 12.11.2014    source источник


Ответы (1)


  1. Посмотрите на CLI Apache Commons, это почти наверняка лучше, чем пытаться "конвертировать" (kludge) программа, которая в данный момент использует Scanner.

  2. Вы можете просто вставить новые строки в аргументы командной строки, если вам это действительно нужно.

    public static void main( String[] args )
    {
      StringBuilder cla = new StringBuilder();
    
      for( String command : args ) {
         cla.append( command );
         cla.append( '\n' );  // newline
      }
      String finalCommand = cla.toString();
    }
    
person markspace    schedule 12.11.2014
comment
На самом деле я в основном закончил проект, у меня есть только эта ошибка, а затем немного графического интерфейса и доработки. Если № 2 работает, я буду использовать это. В противном случае я переделаю дизайн и попытаюсь № 1. Идея \n должна работать хорошо, спасибо! - person Nathan; 12.11.2014