Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.java > #12857

System.setIn + zwei Scanner auf ByteArrayInputStream

Path csiph.com!news.swapon.de!aioe.org!.POSTED!not-for-mail
From Robert Hartmann <Robert_Hartmann@gmx.net>
Newsgroups de.comp.lang.java
Subject System.setIn + zwei Scanner auf ByteArrayInputStream
Date Fri, 6 Nov 2015 21:13:35 +0100
Organization Aioe.org NNTP Server
Lines 78
Message-ID <n1j1k4$acb$1@speranza.aioe.org> (permalink)
NNTP-Posting-Host 8zmAJu3QidHcjh2saS/aQA.user.speranza.aioe.org
Mime-Version 1.0
Content-Type text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding 8bit
X-Complaints-To abuse@aioe.org
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:38.0) Gecko/20100101 Thunderbird/38.3.0
X-Notice Filtered by postfilter v. 0.8.2
X-Mozilla-News-Host news://news.aioe.org:119
Xref csiph.com de.comp.lang.java:12857

Show key headers only | View raw


Hallo zusammen,

Unabhängig von der grundsätzlichen Frage,
ob man zwei verschiedene java.util.Scanner-Instanzen
auf System.in überhaupt "los lassen" können sollte,
stellt sich mir nun die tatsächlich praktische Frage:

Warum erhält im unteren Beispiel, die zweite
Scanner-Instanz nicht den Teil "Welt" ?
Wenn ich System.in per System.setIn auf
den ByteArrayInputStream umbiege?



Aufschließende Frage:
Wenn ich ein Modul-Teste (per JUnit4),
und dieses Modul nutzt den Scanner,
wie kann ich System.in so umbiegen,
dass eine beliebige Anzahl von Instanzen des Scanners
die vorgegebenen Testeingaben zu Gesicht bekommt?

Konkreter:
Es soll also für den Test kein Unterschied machen,
ob im zu testenden Modul

    Scanner sc = new Scanner(System.in);
    String A=sc.next(); String B=sc.next()

oder

    Scanner scA = new Scanner(System.in);
    Scanner scB = new Scanner(System.in);
    String A=scA.next(); String B=scB.next()

steht.


Ich wünsche ein schönes Wochenende,
Gruß Robert









/******** 8< ****************/

import java.io.ByteArrayInputStream;
import java.util.Scanner;

public class SystemInTest {

   public static void main(String[] args) {
      ByteArrayInputStream inbuf
        =  new ByteArrayInputStream("Hallo\nWelt\n".getBytes());

      System.setIn(inbuf);
		
      Scanner sc1 = new Scanner(System.in);
      String s1 = sc1.next();
      if (sc1.hasNext()){
        System.out.println("sc1: found next okay, open new Scanner:");
        Scanner sc2 = new Scanner(System.in);
        if (sc2.hasNext()){
           String s2 = sc2.next();
           System.out.println("S2= "+s2);
        } else {
           System.err.println("sc2 no next");
        }
        sc2.close();
      }
      System.out.println("S1= "+s1);
      sc1.close();
   }
}

Back to de.comp.lang.java | Previous | NextNext in thread | Find similar


Thread

System.setIn + zwei Scanner auf ByteArrayInputStream Robert Hartmann <Robert_Hartmann@gmx.net> - 2015-11-06 21:13 +0100
  Re: System.setIn + zwei Scanner auf ByteArrayInputStream Robert Hartmann <Robert_Hartmann@gmx.net> - 2015-11-09 19:07 +0100

csiph-web