2009-04-04 43 views
20

Tôi đang cố gắng phát hiện xem 'a' có được nhập làm đối số chuỗi đầu tiên hay không.Đối số dòng lệnh Java

+0

có thể trùng lặp của (http://stackoverflow.com/ Câu hỏi/367706/how-to-parse-command-line-đối số-trong-java) – xenteros

Trả lời

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

Phương thức main của bạn có đối số String[]. Có chứa các đối số đã được chuyển đến các ứng dụng của bạn (nó thường được gọi là args, nhưng đó không phải là một yêu cầu).

5

Đối số dòng lệnh được chuyển trong tham số String[] đầu tiên đến main(), ví dụ:

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

Trong ví dụ trên, args chứa tất cả các đối số dòng lệnh.

ngắn, câu trả lời ngọt ngào cho câu hỏi đặt ra là: đối số dòng

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

lệnh có thể truy cập thông qua String[] args tham số của main phương pháp.

Đối số đầu tiên bạn có thể kiểm tra args[0]

toàn bộ mã sẽ trông như thế

public static void main(String[] args) { 
    if ("a".equals(args[0])) { 
     // do something 
    } 
} 
chương trình
15

Mỗi Java bắt đầu với

public static void main(String[] args) { 

Đó mảng kiểu String rằng main() mất như một tham số giữ các đối số dòng lệnh cho chương trình của bạn. Nếu người dùng chạy chương trình của bạn dưới dạng

$ java myProgram a 

thì args[0] sẽ giữ chuỗi "a".

0

Như mọi người khác đã nói ... phương pháp .equals là những gì bạn cần.

Trong tắt cơ hội bạn sử dụng một cái gì đó như:

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

sau đó nó không hoạt động vì == so sánh vị trí của hai đối tượng (bình đẳng vật lý) chứ không phải là nội dung (bình đẳng logic).

Vì "a" từ dòng lệnh và "a" trong nguồn cho chương trình của bạn được cấp phát ở hai vị trí khác nhau, nên không thể sử dụng ==. Bạn phải sử dụng phương thức equals để kiểm tra xem cả hai chuỗi có cùng ký tự hay không.

Một lưu ý khác ... "a" == "a" sẽ hoạt động trong nhiều trường hợp, bởi vì Chuỗi là đặc biệt trong Java, nhưng 99.99999999999999% thời gian bạn muốn sử dụng .equals.

37

Sử dụng apache commons cli nếu bạn dự định mở rộng quá khứ đó cho một đơn vị duy nhất.

"Thư viện CLI của Apache Commons cung cấp API để phân tích cú pháp các tùy chọn dòng lệnh được chuyển tới các chương trình."

Commons CLI hỗ trợ các loại khác nhau của các tùy chọn:

  • POSIX như tùy chọn (. Tức là tar -zxvf foo.tar.gz)
  • GNU như tùy chọn dài (tức là du --human có thể đọc được. max-depth = 1)
  • Java như các thuộc tính (ví dụ. java -Djava.awt.headless = true -Djava.net.useSystemProxies = true Foo)
  • tùy chọn ngắn với giá trị đính kèm (tức là gcc -O2. foo.c)
  • tùy chọn dài với dấu gạch nối đơn (ví dụ: ant -projec thelp)
1

Cố gắng vượt qua giá trị a và so sánh bằng cách sử dụng phương pháp bình đẳng như thế này:

public static void main(String str[]) { 

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

    System.out.println(b); 

} 

theo liên kết này để biết thêm về Command line argument in Java

+0

Đây không phải là 'null'-an toàn ... – Samoth

0

đối số dòng lệnh được lưu trữ như các chuỗi trong các String mảng String[] args that is passed to chính() `.

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

Đối số dòng lệnh là đầu vào chấp nhận từ dấu nhắc lệnh trong khi chạy chương trình. Các đối số thông qua có thể là bất cứ điều gì. Được lưu trữ trong mảng args[].

//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]); 
    } 
    } 

Ví dụ:

java Argdemo one two 

Kết quả sẽ là: [? Làm thế nào để phân tích đối số dòng lệnh trong Java]

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

Trong ví dụ của bạn, dòng đầu tiên' javastack.java.' có nghĩa là gì ? Tôi không biết chắc chắn 'It' trong' Nó được sử dụng để chấp nhận đầu vào từ dấu nhắc lệnh trong khi chạy chương trình.' là đề cập đến, nhưng trình tự là 1) phân tích cú pháp lệnh 2) các tham số thiết lập 3) chạy chương trình. Tôi không biết chắc chắn 'This' trong' Điều này về cơ bản tăng tốc độ thực hiện chương trình khi chương trình phụ thuộc vào input.' của người dùng là đề cập đến, nhưng không có gì trong _parameter passing_ để _speed lên chương trình execute_. – greybeard

Các vấn đề liên quan