Как вы читаете несколько строк, используя readLine в Groovy через SpringSource Eclipse?

Я пытаюсь прочитать несколько входных данных с консоли в Groovy 1.7.10 в Spring Source Suite 2.7.1 (несколько in.readLine()), но консоль, кажется, позволяет мне вводить только первую запись, помещает пробел для вторую запись и перемещается, чтобы позволить мне ввести третью запись, вставляет пробел для четвертой записи и т. д. Ниже приведен код, который я использую.

System.in.withReader {reader ->
        print  "w: "
        def w = reader.readLine()
        print  "x: "
        def x = reader.readLine()
        print "y: "
        def y = reader.readLine()
        print "z: "
        def z = reader.readLine()
} 

Вывод, который я получаю, выглядит следующим образом.

w: 1 x: y: 2 z:

Как вы можете видеть, он позволяет мне ввести первую строку, ставит пробел для второй, позволяет мне ввести третью строку и ставит пробел для четвертой. Это связано с тем, что я нажимаю «ввод» при вводе ввода? Я бы подумал, что нет, поскольку readLine() должен читать строку и извлекать текст до, но не включая возврат каретки. Любая помощь приветствуется.

Спасибо,

Хуан


person jcb    schedule 29.09.2011    source источник


Ответы (2)


Предполагая, что вы используете Java 6+, можете ли вы попробовать использовать класс Console для чтения строк?

def values = System.console().with { 
  [ 'w', 'x', 'y', 'z' ].inject( [:] ) { map, val ->
    map << [ (val):readLine( "$val: " ) ]
  }
}

println "Got w=$values.w x=$values.x y=$values.y z=$values.z"

Не уверен, что Console работает внутри STS...

person tim_yates    schedule 29.09.2011

Я предполагаю, что это в Windows ... там есть метод readLine(boolean ignoreLF), но он не виден или не работает. Я тоже сталкиваюсь с этой проблемой.

А пока просто запускайте дополнительный вызов reader.readLine() каждый раз.

person Kevin McCarpenter    schedule 12.02.2013