2009-04-04 13 views
20

Ich versuche herauszufinden, ob das 'a' als erstes String-Argument eingegeben wurde.Java Befehlszeilenargumente

+0

Mögliche Duplikat (http://stackoverflow.com/ Fragen/367706/how-to-parse-Kommandozeilenargumente-in-java) – xenteros

Antwort

31
public class YourClass { 
    public static void main(String[] args) { 
     if (args.length > 0 && args[0].equals("a")){ 
      //... 
     } 
    } 
} 
1

Ihre main Methode hat ein String[] Argument. Diese enthalten die Argumente, die an Ihre Anwendungen übergeben wurden (oft args genannt, aber das ist keine Voraussetzung).

5

Befehlszeilenargumente werden im ersten String[] Parameter main(), bestanden z.B.

public static void main(String[] args) { 
} 

In dem obigen Beispiel enthält die args alle Befehlszeilenargumente.

Die kurze, süße Antwort auf die gestellte Frage ist:

public static void main(String[] args) { 
    if(args.length > 0 && args[0].equals("a")) { 
     // first argument is "a" 
    } else { 
     // oh noes!? 
    } 
} 
2

Kommandozeilenargumente über String[] args Parameter main Verfahren zugänglich sind.

Für erste Argument können Sie args[0] überprüfen

gesamte Code wie

aussehen würde
public static void main(String[] args) { 
    if ("a".equals(args[0])) { 
     // do something 
    } 
} 
15

Programm Jedes Java beginnt mit

public static void main(String[] args) { 

Das Array vom Typ String dass main() als Parameter Enthält die Befehlszeilenargumente für Ihr Programm. Wenn der Benutzer läuft das Programm als

$ java myProgram a 

dann args[0] den String „a“ halten.

0

Wie alle anderen schon gesagt haben ... ist die .equals-Methode das, was Sie brauchen.

In den unwahrscheinlichen Fall Sie so etwas wie verwendet:

if(argv[0] == "a") 

dann funktioniert es nicht, weil == die Lage der beiden Objekte (physische Gleichheit) eher als der Inhalt (logische Gleichheit) vergleicht.

Da "a" von der Befehlszeile und "a" in der Quelle für Ihr Programm an zwei verschiedenen Stellen zugewiesen sind, kann das == nicht verwendet werden. Sie müssen die equals-Methode verwenden, die überprüft, ob beide Zeichenfolgen die gleichen Zeichen haben.

Eine andere Anmerkung ... "a" == "a" wird in vielen Fällen funktionieren, da Strings in Java speziell sind, aber 99.99999999999999% der Zeit, die Sie verwenden möchten .equals.

37

Verwenden Sie die apache commons cli, wenn Sie vorhaben, diese auf einen einzelnen Arg zu erweitern.

"Die Apache Commons CLI-Bibliothek stellt eine API zum Parsen von Befehlszeilenoptionen bereit, die an Programme übergeben werden. Sie kann auch Hilfemeldungen mit den Optionen für ein Befehlszeilentool ausgeben."

Commons CLI unterstützt verschiedene Arten von Optionen:

  • POSIX wie Optionen (. Dh tar -zxvf foo.tar.gz)
  • GNU wie lange Optionen (dh du --human lesbar. --max-depth = 1)
  • Java ähnliche Eigenschaften (dh. java -Djava.awt.headless = true -Djava.net.useSystemProxies = true Foo)
  • Short-Optionen mit Wert befestigt (dh. gcc -O2 foo.c)
  • lange Optionen mit einzelnen Bindestrich (dh. ant-projec thelp)
1

Try Wert ein zu übergeben und vergleichen Sie die Methode equals wie folgt aus:

public static void main(String str[]) { 

    boolean b = str[0].equals("a"); 

    System.out.println(b); 

} 

Folgen Sie diesem Link, um mehr über Command line argument in Java

+0

Das ist nicht 'null'-safe ... – Samoth

0

Kommandozeilenargumente werden als Zeichenfolgen in der gespeicherten String Array String[] args that is passed to main() `.

java [program name] [arg1,arg2 ,..] 

Befehlszeilenargumente sind die Eingaben, die von der Eingabeaufforderung akzeptiert, während das Programm läuft. Die übergebenen Argumente können alles sein. Welche ist im args[] Array gespeichert.

//Display all command line information 
     class ArgDemo{ 
      public static void main(String args[]){ 
      System.out.println("there are "+args.length+"command-line arguments."); 
      for(int i=0;i<args.length;i++) 
      System.out.println("args["+i+"]:"+args[i]); 
    } 
    } 

Beispiel:

java Argdemo one two 

Der Ausgang wird sein: [? Wie Befehlszeilenargumente in Java analysieren]

there are 2 command line arguments: 
they are: 
arg[0]:one 
arg[1]:two 
+0

In Ihrem Beispiel, was bedeutet die erste Zeile' javastack.java' ? Ich weiß nicht sicher, was das 'It' in' es verwendet, um die Eingabe von der Eingabeaufforderung zu akzeptieren, während das Programm ausgeführt wird.] Bezieht sich auf, aber die Sequenz ist 1) analysieren Befehl 2) Setup-Parameter 3) Programm ausführen. Ich weiß nicht genau, was das 'This' in' Dies beschleunigt wesentlich die Programmausführung, wenn das Programm von Benutzereingaben abhängig ist. 'Bezieht sich auf, aber es gibt nichts in _parameter passing_, um die Programmausführung_zu beschleunigen. – greybeard