Einführung in das Einlesen von Text von der Kommandozeile in der Programmiersprache Java im Rahmen der Lehre des Programmierens mit der Programmiersprache Java. (), Lektion, Seite 720768
https://www.purl.org/stefan_ram/pub/java_einlesen_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Umgang mit der Konsole in Java

Einlesen eines double-Scanner-Numerales und Ausgabe des Doppelten.

Main.java

public final class Main

{

public static void main( final java.lang.String[] args )

{

java.lang.System.out.println( 2 * new java.util.Scanner( java.lang.System.in ).nextDouble() ); }}

Protokoll
12
24.0

Scanner hat ein fluent-Interface!

Ein Scanner-Objekt hat eine aktuelle Leseposition. skip verschiebt diese gegebenenfalls nach vorne.

Das gleiche mit Eingabeaufforderung und Variablendeklarationen:

Main.java

public final class Main

{

public static void main( final java.lang.String[] args )

{ final var input = new java.util.Scanner( java.lang.System.in );

java.lang.System.out.print( "Zahl? " );

final var eingabe = input.nextDouble();

java.lang.System.out.println( "Ergebnis = " + 2 * eingabe ); }}

Protokoll
Zahl? 12
Ergebnis = 24.0

Bezüge auf die Zukunft

Der Name »eingabe« in dem Programm des vorigen Abschnitts zeigt, daß es möglich ist, sich in einem Programm mit einem Namen auf einen Wert zu beziehen, der erst in der Zukunft festgelegt und bekannt werden wird. (Der Wert des Namens ist beim Schreiben des Programms noch nicht bekannt, sondern wird erst festgelegt werden, wenn das Programm gestartet werden wird.)

Ein Scanner ist ein Wrapper, beispielsweise für einen String.

Main.java

public final class Main
{ public static void main( final java.lang.String[] args )

{ final int a = new java.util.Scanner( "Es sind 2 Tannen." ).
skip( "\\D+" ).nextInt();
java.lang.System.out.println( a ); }}

transcript
2
Main.java

public final class Main
{

public static void main
( final java.lang.String[] args )
{

final java.util.Scanner source =new java.util.Scanner
( "12.12.2007 10:39:59 abc def\n" +
"12.12.2007 10:39:59 abc def\n" );

while( source.hasNextLine() )
{ java.lang.System.out.println
( source.nextLine().replaceAll( "(?:\\S+\\s+){2}", "" )); }}}

transcript
abc def
abc def
Main.java

public final class Main
{

public static void scan( final java.lang.String text )
{ final java.util.Scanner scanner =
new java.util.Scanner( text );
while( scanner.hasNext() )
java.lang.System.out.print( scanner.findInLine( "[-+*/()]|\\d+" )+ ", " );
java.lang.System.out.println(); }

public static void main( final java.lang.String[] args )
{ scan( "(+ 12 2)" ); }}

transcript
(, +, 12, 2, ), 
Main.java

public final class Main

{

public static void main( final java.lang.String[] args )

{ java.lang.System.out.println
( "Hello, " + new java.util.Scanner( System.in ).nextLine() + "!"); }}

transcript

Stefan

Hello, Stefan!

Main.java

public final class Main

{

public static void main( final java.lang.String[] args )

{

java.lang.System.out.print( "Please enter your first name: " );

java.lang.System.out.flush();

java.lang.System.out.println

( "Hello, " + new java.util.Scanner( java.lang.System.in ).nextLine() + "!" ); }}

transcript

Please enter your first name: Stefan

Hello, Stefan!

Main.java

public final class Main

{

public static void main( final java.lang.String[] args )

{

final java.util.Scanner in = new java.util.Scanner( java.lang.System.in );

boolean ok = false;

do
{ java.lang.System.out.print( "int: " );

if( in.hasNextInt() )
{ java.lang.System.out.println( in.nextInt() ); ok = true; }
else
{ java.lang.System.out.println( "?Bitte wiederholen" ); in.next(); }}
while( !ok ); }}

transcript
int: abc
?Bitte wiederholen
int:
abc
?Bitte wiederholen
int: 12
Einige Fragmente

java.util.Scanner scanner = new java.util.Scanner( java.lang.System.in );

final int number = scanner.nextInt();

final double value = scanner.nextDouble();

scanner.next() // Einlesen eines Strings

Lesen von Zeilen mit Scanner (Fragmente)

Fragmente

wordStream = new java.io.FileInputStream( "C:/R/n/S/WINDOWS/Desktop/it16000.txt" );

wordScanner = new java.util.Scanner( wordStream );

while( wordScanner.hasNextLine() )

{ final java.lang.String wordLine = wordScanner.nextLine(); }

Fragmente

scanner.skip( "References: " );

scanner.useDelimiter( "[ \t\r\n]+" );

System.out.println( s.nextInt() );

System.out.println( s.next() );

Fragment

if( scanner.hasNext( "<[^>]+>" ) )

{ final java.lang.String to = scanner.next( "<[^>]+>" ); }

Einlesen von der Konsole und EIngabeprüfung
Main.java
final class Main
{
final static java.util.Scanner scanner
= new java.util.Scanner( java.lang.System.in );

public static double input()
{ while( true )
{ try
{ final double x = scanner.nextDouble();
return x; }
catch( final java.util.InputMismatchException exception )
{ java.lang.System.err.println( "Bitte erneut versuchen!" );
scanner.skip( ".*" ); }
catch( final java.lang.Exception exception )
{ java.lang.System.err.println( "?Unbekannter Fehler" );
scanner.skip( ".*" ); }}}

public static void main( final java.lang.String[] args )
{ final double d = input();
final double d1 = input();
java.lang.System.out.printf( "Summe %g%n",( d + d1 ) ); }}
transcript

12

8

Summe 20.0000

Ausgabe auf die Windows-Konsole

write437.java
public final class Test 
{ public static void main( String s[]) 
{ try { 
java.io.BufferedWriter out =  
new java.io.BufferedWriter 
( new java.io.OutputStreamWriter( java.lang.System.out, "cp437" )); 
out.write( ( 'a' )); 
out.write( ( 'b' ));  
out.close(); } 
catch( java.io.UnsupportedEncodingException e ){}  
catch( java.io.IOException e ){}}}

Aussprachehinweis
close cloz

Mit dauerhafter Umstellung von java.lang.System.out:

Test.java
public final class Test
{ public static void main( String s[])
{ try { System.setOut( new java.io.PrintStream(
new java.io.FileOutputStream( java.io.FileDescriptor.out ),
false, "cp437" )); }
catch( java.io.UnsupportedEncodingException e ){}
java.lang.System.out.print( "äöüÄÖÜß" ); }}

Codes.java
public final class Codes
{ public static void main( final String[] argv )
{ try
{ java.lang.System.out.write("\u00f6".getBytes("UTF-8"));
java.lang.System.out.println();
java.lang.System.out.write("\u00f6".getBytes("ISO-8859-1"));
java.lang.System.out.println();
java.lang.System.out.write(0x94); /* CP850, but it is not supported... */
java.lang.System.out.println(); }
catch( Exception e )
{ e.printStackTrace(); }}}

Main.java

public final class Main

{ static java.io.BufferedReader in;

static java.io.PrintWriter out;

public static void main( final java.lang.String args[] ) throws java.io.IOException

{ try

{ in = new java.io.BufferedReader( new java.io.InputStreamReader(System.in, "cp850")); }

catch (final java.io.UnsupportedEncodingException exception)

{ in = new java.io.BufferedReader( new java.io.InputStreamReader(java.lang.System.in, sun.io.ByteToCharConverter.getDefault().getCharacterEncoding())); }

out = new java.io.PrintWriter(new java.io.OutputStreamWriter(System.out, "cp850"), true);

out.println("äöü");

out.print("text: "); out.flush();

String line= in.readLine();

out.println(">" + line + "<");

out.flush();

in.readLine(); }}

Ausgabe auf die Swing-Konsole

Main.java

public final class Main

{

public static void main( final String args[] )

{ StringBuffer report = new StringBuffer();

Console cli = new Console();

if( cli.init( "Console", report, new Controler0() ))

{ cli.setVisible( true ); }

else

{ javax.swing.JOptionPane.showMessageDialog( null, "init error: " + report ); }

cli.outputLine( "*** Commodore BASIC ***" );

cli.outputLine( " 31724 Bytes Free" );

cli.outputLine( "Ready." );

}}

class Answer

{ public String input;

public String output;

public Boolean cont; }

interface Controler

{ Answer command( String c ); };

class Controler0 implements Controler

{ public Answer command( final String c )

{ Answer a = new Answer();

a.input = "";

a.output = "ok";

a.cont = !( c.equals( "exit" ) || c.equals( "quit" ));

return a;

}; };

class Console extends javax.swing.JFrame

{ private final static int default_fontsize = 12;

private final javax.swing.JTextArea output = new javax.swing.JTextArea();

private final javax.swing.JTextField input = new javax.swing.JTextField(32);

private final javax.swing.JPanel panel = new javax.swing.JPanel();

private final javax.swing.JScrollPane scroller = new javax.swing.JScrollPane();

Console() {}

boolean init( final String title, final StringBuffer report, final Controler controler )

{ try

{ this.setTitle( title );

java.awt.Container content = this.getContentPane();

content.setLayout( new java.awt.BorderLayout() );

panel.setLayout( new java.awt.BorderLayout() );

content.add( panel );

output.setEditable( false );

output.setLineWrap( true );

output.setMargin( new java.awt.Insets( 5, 5, 5, 5 ));

output.setFont( new java.awt.Font( "Monospaced", java.awt.Font.PLAIN, default_fontsize ));

scroller.setViewportView( output );

panel.add( scroller, java.awt.BorderLayout.CENTER );

panel.add( input, java.awt.BorderLayout.SOUTH );

input.addActionListener

( new java.awt.event.ActionListener()

{ public void actionPerformed( java.awt.event.ActionEvent e )

{ Answer a = controler.command( input.getText() );

outputLine( a.output );

input.setText( a.input );

if( a.cont ); else

{ System.exit( 0 ); }

}});

input.requestFocus();

return true; }

catch( Exception ex )

{ report.append( "Initialize: " + ex ); return false; }}

void outputLine( String sTextToAppend )

{ output.append( sTextToAppend + "\r\n" );

try

{ output.scrollRectToVisible

( new java.awt.Rectangle

( 0, output.getLineEndOffset( output.getLineCount()), 1, 1 )); }

catch( Exception ex ){} }}

Übungsaufgaben

Übungsaufgabe Schreiben Sie eine Methode, die eine Würfelzahl (1 bis 6) vom Bediener einliest und als Ergebnis zurückgibt. Diese Methode darf nicht "main" heißen. (Verwenden Sie hierzu ggf. eine eventuell früher geschriebene Prüfmethode.) Innerhalb dieser Methode soll die Eingabe wiederholt verlangt werden, wenn eine ungültige Eingabe getätigt wurde. Testen Sie diese Methode.

Bildschirm
Bitte eine Würfelzahl eingeben! 
12 
Eingabe falsch, bitte eine Zahl zwischen 1 und 6 eingeben! 

Eingabe falsch, bitte eine Zahl zwischen 1 und 6 eingeben! 
1

Übungsaufgabe Der Computer soll sich eine Zahl zwischen 0 und 99 denken. Der Bediener kann dann eine Zahl eingeben und erfährt dann, ob die eingegebene Zahl größer, kleiner oder gleich der gedachten ist. Im letzten Fall endet das Programm. Der Bediener soll dabei versuchen, die vom Computer erdachte Zahl möglichst bald einzugeben.

Übungsaufgabe Der Benutzer soll sich eine Zahl zwischen 0 und 99 denken. Der Computer kann dann eine Zahl ausgeben und erfährt dann, ob die ausgegebene Zahl größer, kleiner oder gleich der gedachten ist. Im letzten Fall endet das Programm. Der Computer soll dabei versuchen, die vom Benutzer erdachte Zahl möglichst bald auszugeben.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram720768 stefan_ram:720768 Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd720768, slrprddef720768, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/java_einlesen_de