чтение нескольких строк в качестве входных данных в scala

#scala

#scala

Вопрос:

У меня есть несколько строк в качестве входных данных, и я хочу прочитать и распечатать одно и то же. Проблема в том, что я не знаю, как! ( readLine ) Ввод поступает от пользователя, вводящего в терминале.

первое целое число — это общее количество строк!

ввод:

 4
word
localization
internationalization
  

вывод:

 word
localization
internationalization
  

Комментарии:

1. ввод поступает от пользователя, вводящего данные в терминал. Потому что readLine получает входные данные

2. readLine считывает строку из стандартного интерфейса. Что в этом не сработало?

3. Я хочу, чтобы программа считывала несколько строк одновременно! readLine считывает только одну строку

4. 2 варианта: вызвать readLine несколько раз или написать собственную утилиту на основе InputStream

Ответ №1:

Что-то вроде

 // default condition: string is not empty, not inclusive! 
class TermLines (cond: (String => Boolean) = _ != "") extends Iterator[String] { 
  var s = readLine; 
  def hasNext = cond(s); 
  def next = { var r = s; s = readLine; r } 
} 
  

Затем назовите это как

 println((new TermLines).toVector.mkString("n")) // till empty
  

или

 println(new TermLines(_.last != '.').toVector.mkString("n")) // till last is dot
  

Комментарии:

1. это прекрасно

Ответ №2:

Решено!

 import scala.io.StdIn

object Solution extends App
{
    val numOfLines = StdIn.readInt()
    def words: Seq[String] = for (_ <- 1 to numOfLines) yield StdIn.readLine()
    def sort = words.map
    {
        case word => word
    }
    sort.foreach(println)
}
  

Комментарии:

1. .map() Вызов ничего не делает, поэтому sort он точно такой же, как words .

2. Это не весь код. Я вырезал код. регистр слова, если слово. длина> 10 => (s»$ {word.head}${(word. длина — 2).toString}${word.last}») регистровое слово => слово. Но вы ПРАВЫ!

3. Два набора скобок () не нужны, а ненужный .toString . Использование readInt() опасно. Рад, что это работает для вас, но это не очень хорошее решение для фактического вопроса, как указано.