Roboter, Befehle parsen

CEric

Aktives Mitglied
Hi, hab ne kleine Roboter Aufgabe, dabei werden mir über einen String Punkte übergeben, die ich nacheinander abfahren soll.
Java:
String string = args[0];
In dem String steht dann pro Zeile ein Punkt mit x und y Koordinate.
Wie bekomme ich jetzt meine einzelnen Punkte aus dem String, und kann die an meinen Roboter übermitteln?
MfG
 
Zuletzt bearbeitet von einem Moderator:

faetzminator

Gesperrter Benutzer
Du kannst den String mit [c]split()[/c] aufsplitten. Oder mit einem [c]Scanner[/c] Zeile für Zeile lesen. Wie sieht das genau Format der Daten aus? Wie musst du das ganze deinem Roboter übergeben?
 

CEric

Aktives Mitglied
Naja, ich habe folgende Befehle, moveEast(), moveWest(), moveNorth(), moveSouth(), wenn ich jetzt an einem Punkt bin soll ich diesen bemalen, markCurrentNode();
 

faetzminator

Gesperrter Benutzer
Ganz von vorne. Zuerst musst du mal den Input irgendwie in sinnvolle Typen bringen, z.B. [c]List<Point>[/c]. Davon ausgegangen, dass es eine Klasse [c]Point[/c] mit Konstruktor [c]Point(int x, int y)[/c] gibt und dein String so aussieht:
Code:
0 0
17 5
53 22
4 5
kann man das ganze so parsen:
Java:
public List<Point> parseInputData(String input) {
    List<Point> points = new ArrayList<Point>();
    for (String record : input.split("[\\r\\n]+")) {
        if (!record.matches("\\d+\\s+\\d+")) {
            throw new IllegalArgumentException("invalid format for record: " + record);
        }
        String[] values = record.split("\\s+");
        points.add(new Point(Integer.valueOf(values[0]), Integer.valueOf(values[1])));
    }
    return points;
}
Ich splitte also zuerst nach den new Line Characters (\r und \n), danach schau ich, ob die aktuelle Zeile dem Format \d+\s+\d+ (also 1..n Zahlen, danach 1..n Trennzeichen (" ", \t etc.), danach 1..n Zahlen) entspricht. Wenn sie das tut, kann ich einfach nach \s+ trennen und krieg die beiden Werte in [c]values[0][/c] und [c]values[1][/c].
 

ARadauer

Top Contributor
Wie sieht die Schnittstelle zu deinem Roboter aus?
Und wie ist jetzt die Frage?

Willst du wissen wie du aus dem String "8,9" Die Zahl 8 und 9 machen kannst?
 

CEric

Aktives Mitglied
Das mit splitten is klar;
Java:
String[] gesplitted = string.split("\n");
		
		//Fuer Punkt 1, erste Stelle im Array
		String punkt1 = gesplitted[0];
		
		String[] punkte1 = punkt1.split(";");
		//x1 und y1 Werte
		String x1 = punkte1[0];
		String y1 = punkte1[1];
		
		//x1 und y1 Werte in int parsen
		int x_1 = Integer.parseInt(x1);
		int y_1 = Integer.parseInt(y1);

Hab das jetzt mal so, das wäre der erste Punkt, wenn ich das aber für alle Punkte mache, wird das aber saulang.
Problem mit ner Schleife wäre glaub ich, dass ich nicht weis in welcher Reihenfolge ich die Punkte abfahre.
 

faetzminator

Gesperrter Benutzer
Wenn du von meinem Beispielcode [c]record.split("\\s+")[/c] zu [c]record.split("[,;]")[/c] änderst, dann funktioniert es mit einem Komma oder Semikolon (statt Leerzeichen) als Trennzeichen :)

Edit: natürlich muss der matcher auch noch updated werden
 

jgh

Top Contributor
hier mal ein Bsp wie man sowas lösen könnte...ohne irgendwelche Überprüfungen und anderen Kram:
Java:
public static void main(String[] args) {
		String string = "16,16\n8,9\n18,-6\n1,-8\n7,-8\n-1,-8\n-7,13";
		String[] gesplitted = string.split("\n");
		Point[] p = new Point[gesplitted.length];
		for (int i = 0; i < gesplitted.length; i++) {
			String[] punkte = gesplitted[i].split(",");

			int x = Integer.parseInt(punkte[0]);
			int y = Integer.parseInt(punkte[1]);
			Point point = new Point(x, y);
			p[i] = point;
		}
		for (int j = 0; j < p.length; j++) {
			System.out.println("X = " + p[j].x + " ; Y = " + p[j].y);
		}
	}
[XML]X = 16 ; Y = 16
X = 8 ; Y = 9
X = 18 ; Y = -6
X = 1 ; Y = -8
X = 7 ; Y = -8
X = -1 ; Y = -8
X = -7 ; Y = 13
[/XML]
 
J

JohannisderKaeufer

Gast
versteh ich nicht. In der Reihnefolge wie sie in der Datei stehen oder?

Könnte aber auch ein Travelling-Salesman-Problem dahinterstecken.
Die Punkte wären die Städte die alle besucht werden sollen.
Und jetzt könnte man den kürzesten Pfad für dieses Problem suchen.

Das wäre dann der Fall, wenn man eine andere Reihenfolge bevorzugen wollte.
 

vimar

Bekanntes Mitglied
gehts nicht auch mit nem StrTokenizer? und einfach alle delimiter rein?

und dann while (tokenizer.hasNext()) usw?


also ca so

Java:
StrTokenizer splitter = new StrTokenizer(strRoboterbefehle, [";","\n"])

while (splitter.hasMoreElements()){

new point(splitter.nextToken(), splitter.nextToken())

}

in dem sinne?
 
Zuletzt bearbeitet:

CEric

Aktives Mitglied
Hi, also mein Roboter macht jetzt was er soll.
Nun müsste ich i-wie noch das array
Java:
String[] gesplitted;
, das ja die Punkte enthält, [16,16][8,9][18,-6][1,-8][7,-8][-1,-8][-7,13], sortieren, um eine kürzere reihenfolge beim ablaufen der punkte zu bekommen; kann ich das array jetzt zB nur nach der x koordinate sortieren?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Webserver auf Roboter Allgemeine Java-Themen 4
saxman Lego Mindstorms Roboter mit Java programmieren Allgemeine Java-Themen 9
rtm007 Per Java Im Terminal Befehle eingeben. Allgemeine Java-Themen 4
A Befehle in Konsole. Allgemeine Java-Themen 12
T if - Befehle Allgemeine Java-Themen 6
T Git-Befehle mit Java ausführen Allgemeine Java-Themen 5
U CMD Befehle als Admin ausführen Allgemeine Java-Themen 6
O Threads und If Befehle Allgemeine Java-Themen 7
X Java Plugin Befehle Allgemeine Java-Themen 2
D befehle an laufendes programm Allgemeine Java-Themen 8
E Gibt es Befehle für Kursor auf Konsole ? Allgemeine Java-Themen 3
T Shell befehle ausführen - wie? Allgemeine Java-Themen 2
Ark Wann 64 Bit-Befehle im Einsatz? Allgemeine Java-Themen 6
S Process - Befehle senden Allgemeine Java-Themen 13
B Access-Befehle werden in der falschen Reiehnfolge ausgeführt Allgemeine Java-Themen 4
T Befehle verschachteln. Allgemeine Java-Themen 5
N mehrere befehle im cmd Allgemeine Java-Themen 3
N CMD, EXEC, Befehle senden Allgemeine Java-Themen 3
G Java-Befehle Native und Static Allgemeine Java-Themen 2
V Befehle von der Konsole einlesen und Escape-Sequenzen. Allgemeine Java-Themen 2
D Wie kann ich einem externen Programm einen Befehle schicken? Allgemeine Java-Themen 3
M Linux-Befehle per Programm ausführen Allgemeine Java-Themen 10
K Inhalte Parsen von Website Allgemeine Java-Themen 15
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
O JSON in Integer parsen Allgemeine Java-Themen 5
S Ini Text aus String parsen Allgemeine Java-Themen 1
OnDemand Datenbankdatei parsen Allgemeine Java-Themen 2
N svg(xml) parsen und manipulieren? Allgemeine Java-Themen 3
OnDemand CSV parsen mehrere Zeilen Allgemeine Java-Themen 22
2 mehrere Json Werte Parsen Allgemeine Java-Themen 3
G JSON parsen Allgemeine Java-Themen 3
W String Parsen und auf eigenes Muster anwenden (kein Regex) Allgemeine Java-Themen 11
looparda Datei parsen Allgemeine Java-Themen 1
T Jsoup: Mehrere Links nacheinander parsen Allgemeine Java-Themen 11
C Benutzereingabe von EXCEL-Funktionen parsen Allgemeine Java-Themen 4
B Such-String parsen mit Klammern Allgemeine Java-Themen 2
L Windows CMD werte Parsen. Allgemeine Java-Themen 2
B XML parsen Allgemeine Java-Themen 13
H Bestimmten Wert aus String parsen Allgemeine Java-Themen 7
0 Parsen Allgemeine Java-Themen 7
W Best Practice Dateien parsen Allgemeine Java-Themen 3
X Tags "parsen" Allgemeine Java-Themen 8
A Parsen mit java_cup - Shift/Reduce Problem Allgemeine Java-Themen 12
M Informationen aus komplexen String parsen Allgemeine Java-Themen 13
W Dateinamen dynamisch Parsen Allgemeine Java-Themen 12
F JavaMail - Lokale eMail-Datei einlesen und parsen? Allgemeine Java-Themen 9
T String in Date parsen (*ohne* bekanntes Format) Allgemeine Java-Themen 8
M Dateien mit Quelltext parsen Allgemeine Java-Themen 7
W RegEx Zeile parsen Medium Allgemeine Java-Themen 8
S Dateiname mit Regex parsen Allgemeine Java-Themen 3
K _alle_ Sonderzeichen parsen Allgemeine Java-Themen 2
S Feher beim Parsen eines Datums Allgemeine Java-Themen 4
E Reguläre Txt in Tree parsen Allgemeine Java-Themen 2
S Strings zu Color-Instanzen parsen? Allgemeine Java-Themen 7
S Überprüfung/Parsen eines Byte-Arrays Allgemeine Java-Themen 9
martin82 Java-Code aus Text-Datei parsen Allgemeine Java-Themen 3
A String zu Datum parsen - SimpleDateFormat Problem Allgemeine Java-Themen 8
A Datum parsen Allgemeine Java-Themen 9
G Parsen von: if(a > 15 AND (b == 3 OR c != 4)) Allgemeine Java-Themen 3
G String nach Float parsen Allgemeine Java-Themen 2
P OutOfMemoryError beim XML erstellen bzw parsen, mehr RAM? Allgemeine Java-Themen 4
H2SO3- Exception beim date parsen des Jahres 00 Allgemeine Java-Themen 6
H2SO3- date mit pm and am parsen Allgemeine Java-Themen 3
Z Datum ohne Format-Kenntnisse parsen Allgemeine Java-Themen 5
T Wie kontinuierlichen asci input parsen? Allgemeine Java-Themen 3
C Java Quellcode parsen Allgemeine Java-Themen 8
alexpetri Date Parsen Allgemeine Java-Themen 3
G String parsen und Problem mit escaped zeichen Allgemeine Java-Themen 4
M Html parsen Allgemeine Java-Themen 2
D Parameter parsen? Allgemeine Java-Themen 15
V Datum parsen Allgemeine Java-Themen 6
MQue String parsen Allgemeine Java-Themen 11
M wie sinnvoll parsen ? Allgemeine Java-Themen 4
M Link parsen bzw. zerlegen Allgemeine Java-Themen 9
padde479 String in double parsen Allgemeine Java-Themen 6
W Package via Reflection parsen Allgemeine Java-Themen 4
M MP3 Datei selber parsen/werte auslesen Allgemeine Java-Themen 13
J parsen von verschiedenen dokument typen Allgemeine Java-Themen 3
B textzeile parsen Allgemeine Java-Themen 6
T Schlüsseldatei mit Umlauten parsen, aber wie. Allgemeine Java-Themen 6
G mail body parsen (->attachment & filename) Allgemeine Java-Themen 2
J DirectPlay Server-Antwort parsen Allgemeine Java-Themen 2
S String parsen Allgemeine Java-Themen 15
V LogFile parsen Allgemeine Java-Themen 5
E Field-Objekt in JTextField parsen Allgemeine Java-Themen 3
L Prozesse parsen ? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben