Kommandozeile parsen

anaya

Grünschnabel
Hallo Zusammen,

als kommandozeile kriege einer der folgenden parameter:


variante1 : -E1 -srcProgram='value1' -destVersion='0 M666 i'

variante2 : E1 -srcProgram=value1 -destVersion=0 M56 i

variante 3 :E1 -destVersion='M7777'

variante4 : E1 -srcProgram='0'

hat jemand eine idee wie mein kriege ich(parsen) die Werte der srcProgram bzw.destVersion.?

Danke schon mal im voraus.
 
Java:
public class Main extends Object
{
	public static void main(String[] args)
	{
		boolean e1 = false;
		String srcProgram = null;
		String destVersion = null;
		
		for(int i = 0; i < args.length; i++)
		{
			String[] parmsplit = args[i].split("=");
			
			if(parmsplit[0].equals("-E1"))
				e1 = true;
			else if(parmsplit[0].equals("-srcProgram"))
				srcProgram = parmsplit[1];
			else if(parmsplit[0].equals("-destVersion"))
				destVersion = parmsplit[1];
		}
		System.out.println("E1: " + e1 + ", srcProgram: " + srcProgram + ", destVersion: " + destVersion);
	}
}

Du musst noch Dinge wie Längenprüfung des Arrays einfügen um eine Falsche-Parameter-Exception abzufangen. Außerdem darfst du im Parameter keine Space haben weil dort gesplittet wird.
 
Danke erstmal,
das ist ja das Problem das space in der Parameter, das kann auch vorkommen in der Kommandozeile!
ich wüsste auf die Schnelle nicht wie ich das lösen kann, hast du dazu irgendeine Lösung?
 
ich würde immer nach dem "-" spliten und nicht nach "="

dann würde jeder String nachher so aussehen: srcProgram='value1'

Diesen kannst du dann nach dem = splitten
dann ist der 1. String der key und der 2. der value
 
Beispiel:
Java:
import java.util.HashMap;

public class Test {
	public static void main(String[] args) {

		String eingabe = "-E1 -srcProgram='value1' -destVersion='0 M666 i'";

		/* Hier werden später alle parameter gespeichert. */
		HashMap<String, String> keyValue = new HashMap<String, String>();

		String[] params = eingabe.split("-");

		for (int i = 0; i < params.length; i++) {
			String param = params[i];

			if (param.contains("=")) {
				// Für einen Falle wie -srcProgram='value1'
				String[] kv = param.split("=");
				keyValue.put(kv[0], kv[1]);
			} else {
				// Für einen Falle wie -E1
				if (!param.equals("")) {
					keyValue.put(param, null);
				}
			}
		}

		// nur als Ausgabe:
		for (String key : keyValue.keySet()) {
			System.out.println(key + "  :  " + keyValue.get(key));
		}
	}

}
 
Zuletzt bearbeitet:
Wegen den Space könntest du den von der VM übergebenen Array wieder zusammenfügen. Ist zwar eine imho unnötige Arbeit, aber wenn dus willst dann renn halt eine Schleife durch und hänge den Wert immer hinten dran, damit so ein String wie z. B. von Johannes rauskommt:

Java:
String eingabe  = null;
for(int i = 0; i < args.lenght; i++)
	eingabe = eingabe + " " args[i];

@Johannes: Eigendlich müsste man so doch garnicht splitten, da der übergebene Wert es eh schon ist, sondern nur ggfalls das erste Zeichen, also das Minus entfernen.
 
Zuletzt bearbeitet:
Zurück