Java: eingabe eines string

N

Naphaneal

unregistriert
Thread Starter
Dabei seit
05.12.2007
Beiträge
4.085
Reaktionspunkte
343
nabend!

ich krebse hier an nem kleinen problem rum...

und zwar krieg ich es um's verrecken nicht hin einen string einzulesen.

integer oder float/double, geht wunderbar, aber bei string motzt eclipse. (ganymed, 3.4.2)

also ich hab folgendes:

Code:
//objekt erzeugen und ausgabe
		Message message = [COLOR="Purple"]new[/COLOR] Message([COLOR="blue"]"the quick brown fox"[/COLOR], [COLOR="Blue"]"4711"[/COLOR]);
		String fuzzie = message.toString();
		System.out.println(fuzzie);

das will ich so umbauen, daß statt der fest vergebenen strings (blau gedruckt), frei eingetippt werden kann.

also hab ich mir überlegt, daß man das mit dem System.in machen kann.

ergo hab ich schonmal soweit:

Code:
Scanner scanner = new Scanner(System.in);
System.out.printf("Zeichenkette: ");
String zeichen = scanner.next();
System.out.println("Kontrolle: " + zeichen);

syntaktisch scheint alles ok. aber beim compilieren meckert der dann rum. blöderweise hab ich die fehlermeldung nicht, weil mir eclipse zwischenzeitlich abgeschmiert ist.

einer ne idee, wie ich das hinkriege?

thx

Naph

p.s.: so sieht die Klasse Message aus

Code:
package VerteilteAnwendung;
import java.util.*;
import java.io.*;
public class Message
{
//attribute
	private String messageText = "default", iD = "default";
	
//konstruktor
	public Message (String messageText, String iD)
	{
		this.messageText = messageText;
		this.iD = iD;
		return;
	}
//ausgabemethode fuer attribute
	public String toString()
	{
		return "Message Text: " + this.messageText + " " + "ID: " + this.iD;
	}
}
 
Das funktioniert bei mir ohne Probleme.

Kannst du mal die ganze Klasse reinkopieren, wo du den Scanner benutzt?
Vielleicht liegt der Fehler wo anders.

P.s.: Warum importierst du java.util.* und java.io.* in der Klasse Message?
 
überbleibsel...ich hatte in der klasse vorher ne main drin...
 
Also, ich hab einfach mal ne Testklasse erstellt:

Code:
import java.util.Scanner;

public class TestMessage {

	public void teste(){
		Scanner scanner = new Scanner(System.in);
		System.out.print("Zeichenkette: ");
		String zeichen = scanner.next();
		System.out.println("Kontrolle: " + zeichen);
	}
	
	public static void main(String[] args) {
		TestMessage m = new TestMessage();
		m.teste();
	}
	
}

damit gehts eigentlich ohne Probleme
 
  • Gefällt mir
Reaktionen: Naphaneal
hmm...einleuchtend...aber mir fällt grad auf...ich will ja zwei werte abfragen und übergeben. müsste ich da den string ggfs konkatenieren?

btw:

Code:
package VerteilteAnwendung;

import java.io.*;
import java.util.*;


public class Main

{
	public static void main(String[] args) throws IOException
	{

		//Scanner-klasse zur eingabe
		Scanner scanner = new Scanner(System.in);
		//objekt erzeugen und ausgabe
		System.out.printf("Zeichenkette: ");
		String delta = scanner.next();
		System.out.printf("Zeichenkette: ");
		String foxtrott = scanner.next();
		System.out.println("Kontrolle: " + delta + ";" +  foxtrott);
		Message message = new Message(delta, foxtrott);
		String fuzzie = message.toString();
		System.out.println(fuzzie);
		
	}
}

so hab ich mir das gedacht...
 
Zuletzt bearbeitet:
Du könntest das auf viele Arten machen:

Zum Beispiel einfach zwei Abfragen, einmal nach deinem messageText und einmal nach der iD und damit dann das Message-Objekt erzeugen.

Du könntest aber auch einen kompletten String einlesen und irgendein Trennzeichen definieren und dem Scanner sagen, dass er nach diesem Zeichen den String aufteilen soll. Die einzelnen Teile kannst du ja dann in verschiedene Strings speichern und wieder das Message-Objekt damit erzeugen.

Gibt bestimmt auch noch andere, schönere Möglichkeiten, die mir jetzt nicht auf die schnelle Einfallen :)

edit: ja, so gehts doch. Wenn das so reicht, ists doch ok.
 
dann versteh ich nicht, warum der da mosert...aber na gut..werd das mal ausprobieren...

edit:

hmm...funktioniert zwar, aber noch nicht so ganz wie gewünscht...der kann mit leerzeichen nichts anfangen...
wie kann ich das abfangen, daß auch leerzeichen gelesen werden?

hat sich erledigt... ein "nextLine();" hätte es sein müssen.
 
Zuletzt bearbeitet:
Wie gesagt, bei mir gehts sowohl mit Ganymede als auch mit Galileo ohne Probleme. Was da bei dir jetzt genau hängt ist ohne Fehlermeldung halt schwer nachzuvollziehen :(
 
mal ne frage...wie kann ich die farbe einer textausgabe ändern?

ich hab da folgende zeile:

Code:
System.out.println([COLOR="Blue"]"COMMAND "[/COLOR]+ parseText +[COLOR="Blue"]" NOT FOUND!"[/COLOR]);

ich will nun den text in parseText in einer anderen farbe darstellen, damit das von der restlichen ausgabe abhebt.

achja...ausgabe erfolgt in der konsole...
 
sorry, aber ich versteh nicht so ganz, was du mir sagen willst.
 
ja, um die geht's...dachte das wäre bereits klar...sorry...hätte ich wohl nochmal explizit erwähnen sollen...aber mit kopfschmerzen denkt es sich nicht so gut...
 
Es geht um die Java Konsole und nicht um eine beliebige Unix Shell.

ja, um die geht's...dachte das wäre bereits klar...sorry...hätte ich wohl nochmal explizit erwähnen sollen...aber mit kopfschmerzen denkt es sich nicht so gut...

Alles Klar. Da fällt mir nichts zu ein. Einzig die Eclipse Console lässt sich meines Wissens noch einfärben...

@Naphaneal: Mein Link sendet an eine umgebende Unix-Shell (hier Bash) Steuersequenzen, die den ausgegebenen Text einfärbt.
 
Ich denke schon:
CHARVA is not a "Pure Java" package; the Java classes use the Java Native Interface (JNI) to call screen-handling functions provided by the shared "libTerminal.so" library, which is linked with the GNU ncurses library. Porting CHARVA to a different platform involves recompiling the C source code for the libTerminal.so shared library. GNU ncurses is supported on dozens of Unix flavors besides Linux; CHARVA should be able to run on any platform that supports both Java and ncurses.
Allerdings ist zumindest das charva Projekt älter, unter 10.2 konnte man es noch kompilieren. Darum würde ich mit dem javacurses spielen. Das scheint ähnlich zu arbeiten:
The Java Curses Library (JCurses) is library for developing text terminal based applications using Java programming language. It is implemented as a Windowing toolkit similar to AWT, but built upon the UNIX "curses" windowing system.
 
Dann ist es so, wie ich es vermutet hab. Die Bibliothek linkt gegen libTerminal und sendet Signale an das Terminal. Die Java-Konsole ist imho *kein* Terminal, sondern nur eine Logging-Facility! Ihr fehlt die gesamte Terminal-Emulation!
 
aha...also nicht ohne umwege zu programmieren...halb so wild...ist kein lebensnotwendiges feature...
 
Zurück
Oben Unten