Parametry wejściowe w command line

Odpowiedz Nowy wątek
2018-05-03 20:47
0

Witam

Poniższy kod ma wyświetlić wszystkie parametry podane na wejściu, ma na celu jedynie zobrazowanie problemu. Po wywołaniu tego kodu z parametrami np. 3 5 8 2 *
Program wyświetla:

0 Argument: 3
1 Argument: 5
2 Argument: 8
3 Argument: 2
4 Argument: Testy.class
5 Argument: Testy.java

Pytaniem jest dlaczego zamiast przypisać gwiazdkę do tablicy, program wprowadza do niej zawartość folderu? I jak wprowadzić "*" do tablicy poprzez command line.

Kod programu:

public class Testy {
    public static void main (String[] args)
    {
        for(int i=0; i<args.length; i++)
        {
            System.out.println(i+ " Argument: "+ args[i]);
        }
    }
}

Pozostało 580 znaków

2018-05-03 21:20
0

U mnie działa

javac Testy.java && java Testy 3 5 8 2 "*"

Pozostało 580 znaków

2018-05-03 21:25
0

Mam na myśli, kiedy użytkownik wprowadza parametry w taki sposób: 3 5 8 2 * (bez cudzysłowu)

Pozostało 580 znaków

2018-05-03 22:57
3

Hej, część znaków specjalnych, głównie z tych z shella w Java są interpretowane na poziome przetwarzania jako argumenty wywołania programu. W tym przypadku * bierze wszystko co znajduje się w katalogu.
Gdybyś np użył

*.java

, to Twój program wypisze:

0 Argument: 3
1 Argument: 5
2 Argument: 8
3 Argument: 2
4 Argument: Testy.java

Na stacku już ktoś poruszał ten wątek: stackoverflow

Obawiam się że w przypadku prostego programu będziesz zmuszony/a korzystać ze znaków cudzysłowowa, aby przetworzyć * jako znak.
Możesz też zaglądnąć do bibliotek, np: Apache Commons CLI.

edytowany 2x, ostatnio: okarmusk, 2018-05-04 10:00

Pozostało 580 znaków

2018-05-04 00:06
0

Dzięki za szybkie odpowiedzi.
Chciałbym jednak spróbować, aby program przetwarzał ten znak specjalny na zwykłego Stringa.

Mógłbym uzyskać od Was jakieś wskazówki jak można to zrobić?
Jakoś wyłączyć znaki specjalne na czas wykonywania danego fragmentu programu? Zmodyfikować działanie znaku specjalnego przy tym programie?

Pozostało 580 znaków

2018-05-04 01:57
0
import java.util.Scanner;

Scanner scan = new Scanner(System.in);
String[] arguments = new String[7];
char c;
int i=0;
while(c!=(//Tutaj wpisz jaki miałby być znak, który by zakończył dopisywanie do String'a//)){
 c = scan.next().charAt(0);
     arguments[i] = c;
     i++;
}

W ten sposób otrzymując input od użytkownika możesz zapisać do dowolnej tablicy String, np typowej dla main'a tablicy arguments, znak wpisany jako pierwszy. Nie sprawdzałem tego osobiście ale nieco poszperałem i między innymi takie rozwiązanie z tego mi się ułożyło. Jeżeli nie będzie Ci dalej działać albo nie chodziło o to, to poszukam dalej o ile ktoś mnie nie uprzedzi z dobrą odpowiedzią.

edytowany 1x, ostatnio: Daniel Witusowski, 2018-05-04 02:01

Pozostało 580 znaków

2018-05-04 07:37

Shell, którego używasz do uruchomienia programu (windowsowy cmd, linuxowy bash etc.) może mieć znaki specjalne, które interpretuje i rozwija do jakichś wartości, np. $FOO pod bashem zostanie rozwinięte do wartości zmiennej FOO, podobnie %FOO% pod windowsem. Tak rozwinięta wartość zostanie przekazana do programu, który uruchamiasz.
Shelle umożliwiają escapowanie znaków specjalnych. Jak escapować? To zależy od konkretnego shella.

Można tak:

3 5 8 2 \*

albo tak:

3 5 8 2 ^*

albo tak:

3 5 8 2 "*"

Pozostało 580 znaków

2018-05-04 10:33
1
SoClose23 napisał(a):

Dzięki za szybkie odpowiedzi.
Chciałbym jednak spróbować, aby program przetwarzał ten znak specjalny na zwykłego Stringa.

Mógłbym uzyskać od Was jakieś wskazówki jak można to zrobić?
Jakoś wyłączyć znaki specjalne na czas wykonywania danego fragmentu programu? Zmodyfikować działanie znaku specjalnego przy tym programie?

Nie da się. Po prostu się nie da. :)

Twój program w Javie czy czym kolwiek innym nie ma tu nic do gadania. Program jest uruchamiany przez powłokę, a ta powłoka interpretuję gwiazdkę po swojemu ZANIM uruchomi Twój program.

Albo zrób to, co inni napisali (zaakceptuj to czego nie możesz zmienić i pisz w powłoce '*'), albo wybierz do swoich celów inny znak, który nie jest specjalny w powłoce (może %?)...

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0