2017-02-18 15 views
0

Я пытаюсь заставить эту простую программу работать, но я не уверен, что я делаю неправильно; Я попытался создать новый файл, чтобы узнать, была ли проблема с моим синтаксисом, но это все еще происходит. Вот оно:Может ли кто-нибудь взглянуть на мой код и рассказать мне, что случилось?

public class test { 

    public static void main(String[] args) { 

    String operator = args[0]; 

    switch(operator) { 

    case "*": 
    System.out.println("Hello"); 
    break; 

      } 
     } 
    } 

Я пытаюсь запустить эту программу на моем терминале сначала делает

$ javac test.java 

, а затем фактически запустить программу вместе с аргументом

$ java test * 

и После этого я ничего не получаю, почему? Кажется, что это работает, когда «*» заменяется на «+».

Я также заметил, что она будет работать только тогда, когда я печатал

$ java test "*" //notice the quotation marks 

Почему звездочка без скобки не работает, даже если это строка, а «+» без скобка работ? Есть что-то, чего я не хватает?

+2

[Глобус] (https://en.wikipedia.org/wiki/Glob_ (программирование)). –

+1

В скобках, вы имеете в виду кавычки? – River

+0

Печать значения 'operator' перед коммутатором может помочь вам понять, что происходит. (Комментарий Эллиота) – qxz

ответ

2

Проблема не имеет ничего общего с Java. Проблема возникает из-за того, что оболочка будет обрабатывать символ * в качестве шаблона имени файла и расширять его до имен всех файлов в текущем каталоге.

Решение должно покинуть символ *в командной строке. Нет ничего, что вы можете сделать в Java, чтобы решить эту проблему.


Есть еще три способа, которые будут работать в качестве побега (для совместимой оболочки POSIX)

java test "*" 
    java test '*' 
    java test \* 

Там могут быть и другие малоизвестные способы сделать это .... но выше должно хватить.

(разница между "*" и '*' является то, что они избегают различных конструкций оболочки. Двойные кавычки отключить просто «универсализации» из путевых имен файлов. Одинарные кавычки также отключить подстановку параметров и другие вещи.)

Символы могут быть нужно экранировать, если их использовать в качестве аргументов командной строки включают в себя:

  • *, ?, [, ], ~, {, } - используется в универсализации, и т.д.
  • $ - символы подстановки параметров
  • оболочки |, &, ;
  • # - символ комментария
  • обратная кавычка характер.

Вы должны обратиться к учебнику или текстовому обозревателю в оболочке или прочитать инструкцию вручную для используемой оболочки.

+0

Что вы имеете в виду, избегаете *? Как в выборе другого символа вместо звездочки? –