java - लाइन द्वारा मानक इनपुट लाइन से कैसे पढ़ा जाए?




scala io (4)

एक पुनरावर्ती संस्करण (संकलक बेहतर ढेर उपयोग के लिए एक पूंछ रिकर्सन का पता लगाता है)

def read: Unit = {
  val s = scala.io.StdIn.readLine()
  println(s)
  if (s.isEmpty) () else read 
}

io.StdIn 2.11 से io.StdIn के उपयोग पर ध्यान दें। इस दृष्टिकोण के साथ भी ध्यान दें कि हम एक संग्रह में उपयोगकर्ता इनपुट जमा कर सकते हैं जो अंततः वापस आ गया है - प्रिंट किए जाने के अलावा। अर्थात्,

import annotation.tailrec

def read: Seq[String]= {

  @tailrec
  def reread(xs: Seq[String]): Seq[String] = {
    val s = StdIn.readLine()
    println(s)
    if (s.isEmpty()) xs else reread(s +: xs) 
  }

  reread(Seq[String]())
}

मानक इनपुट से रेखा से लाइन पढ़ने के लिए स्कैला नुस्खा क्या है? बराबर जावा कोड की तरह कुछ:

import java.util.Scanner; 

public class ScannerTest {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            System.out.println(sc.nextLine());
        }
    }
}

कंसोल के लिए आप Console.readLine उपयोग कर सकते हैं। आप लिख सकते हैं (यदि आप खाली लाइन पर रुकना चाहते हैं):

Iterator.continually(Console.readLine).takeWhile(_.nonEmpty).foreach(line => println("read " + line))

यदि आप इनपुट उत्पन्न करने के लिए फ़ाइल को बिल्ली देते हैं तो आपको या तो शून्य या खाली पर रोकना पड़ सकता है:

@inline def defined(line: String) = {
  line != null && line.nonEmpty
}
Iterator.continually(Console.readLine).takeWhile(defined(_)).foreach(line => println("read " + line))

सबसे सीधा-आगे दिखने वाला दृष्टिकोण केवल readLine() उपयोग करेगा जो Predef का हिस्सा है। हालांकि यह बदसूरत है क्योंकि आपको अंतिम शून्य मूल्य की जांच करने की आवश्यकता है:

object ScannerTest {
  def main(args: Array[String]) {
    var ok = true
    while (ok) {
      val ln = readLine()
      ok = ln != null
      if (ok) println(ln)
    }
  }
}

यह इतना verbose है, आप बजाय java.util.Scanner उपयोग करेंगे।

मुझे लगता है कि एक और सुंदर दृष्टिकोण scala.io.Source उपयोग करेगा। scala.io.Source :

object ScannerTest {
  def main(args: Array[String]) {
    for (ln <- io.Source.stdin.getLines) println(ln)
  }
}

val input = Source.fromInputStream(System.in);
val lines = input.getLines.collect






java.util.scanner